当前位置: 首页 > 科技观察

教你如何为Docker开启IPv6网络支持

时间:2023-03-16 22:17:38 科技观察

Docker默认是没有开启IPv6支持的,但是我们的一些业务经常需要IPv6支持,尤其是IPv6普及的大势所趋。本文主要介绍如何开启Docker桥接网络IPv6支持,本文具体操作仅供参考,建议参考官方文档。本文最重要的前提是主机商已经为您分配了一个公网IPv6地址段,可以通过查看主机控制面板中的信息,询问主机商,或者直接登录主机获取命令ip-finet6addr显示eth0。命令获取的ipv6地址输出如下:6:eth0:mtu9000inet62607:f0d0:1002:51::4/64scopeglobalvalid_lftforeverpreferred_lftforeverinet6fe80::230:48ff:fe33:bc33/64scopelinkvalid_lftforeverpreferred_lftforever5whereinet60607:2607scopeglobal行指示的IPv6地址是我们需要的目标地址。注意我们这里选择的是公网IP,后面用scopeglobal表示。你会注意到后面会有一个fe80开头的IPv6地址,后面就没有global了,这是内网IPv6的一般含义,本文不使用。当然,读者也可以根据实际需要选择内网IPv6,继续参考下文介绍的步骤完成操作。1、IPv6地址段划分Docker可以配置多个虚拟网络。对于IPv4,通过172.17.0.1/16、172.18.0.1/16、172.19.0.1/16等私有IP地址段配置多个IPv4虚拟网络。出于同样的原因,建议将IPv6分成多个段。如果手动划分不方便,可以通过IPv6SubnettingCalculator自动划分,如下图:比如刚才的IPv6地址被划分为4个网段如下:2607:f0d0:1002:51::/662607:f0d0:1002:51:4000::/662607:f0d0:1002:51:8000::/662607:f0d0:1002:51:c000::/662,配置默认DockerIPv6编辑Docker配置文件/etc/docker/daemon.json,如果该文件不存在,请手动创建。配置文件的内容如下。如果你现有的配置文件缺少相应的配置项,添加即可。没有必要完全覆盖内容。{"experimental":true,"ipv6":true,"ip6tables":true,"fixed-cidr-v6":"2607:f0d0:1002:51::/66"}这里的ip6tables是指自动配置IPv6通过Docker如果要手动配置防火墙规则,请改为false或去掉此项,否则容器将无法连接到IPv6网络;fixed-cidr-v6是我们划分的第一个子网段,这里仅供读者根据实际情况修改示例。配置完成后,请使用systemctlrestartdocker重启docker服务生效。完成这一步后,Docker就完成了对IPv6的支持。3.配置DockerCompose的IPv6支持(可选)。这主要是因为我在整理容器时经常使用它。记录在这里,作为备忘。DockerCompose的配置文件的IPv6部分重点是网络部分的配置。如果额外配置网络,则必须选择不同于默认daemon.json的IPv6子网网段,例如:networks:example:enable_ipv6:truedriver:bridgedriver_opts:com.docker.network.enable_ipv6:"true"ipam:config:-subnet:172.23.0.0/16-subnet:"2607:f0d0:1002:51:4000::/66"gateway:2607:f0d0:1002:51:4000::1在此处的示例网络中,我们启用IPv6支持通过配置。网段配置IPv4为172.23.0.0/16,其余第二个网段2607:f0d0:1002:51:4000::/66用于IPv6。注意,这不能与daemon.json中配置的IPv6网段相同。这里的IP配置也是一个例子,请根据实际情况修改。4.参考启用IPv6支持