由于目前Docker 在IPv6网络中运行的相关配置并非默认自动生成的,所以需要大家根据自己的网络环境来具体做一些相应配置,具体如下:
本次操作是在 Ubuntu16/18或者CentOS7 OS上面 通过docker官网手册安装方式 安装的Docker程序
第一步 在 docker 配置文件 添加IPv6配置参数
{
"ipv6": true,
"fixed-cidr-v6": "fc00:17:1:1::/64"
}
之后需要手动对刚才的IPv6内网地址设置NAT转换(因为docker 在IPv4的环境下会自动将内网地址做NAT转换)
并通过 -L 来查看NAT配置是否添加成功
ip6tables -t nat -A POSTROUTING -s fc00:17:1:1::/64 -j MASQUERADE
ip6tables -t nat -L
最后重新启动 docker 服务
systemctl restart docker
效果如下:
经过上述配置后,通过docker run 方式启动(利用默认的bridge网络模式)的容器即可自动获取到fc00:1:1::/64 网段中的IPv6地址。
并能够继承Host寄主机的网络资源环境。
如果你想使用 docker-compose 的方式来启动一组容器的话,那还需要对之前使用的 docker-compose.yml 文件进行部分升级,具体如下:
首先,compose的版本需要使用
version: '2.1'
然后在每一个services中添加网络参数(举例存在一个名为 app_net 的网络)
networks:
app_net:
之后在yml文件的最后添加 app_net 这个网络的具体参数:
networks:
app_net:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: 172.19.0.0/24
gateway: 172.19.0.1
- subnet: fc00:32:1:1::/120
gateway: fc00:32:1:1::1
其中给这个网络分配的IPv6网段是 fc00:32:1:1::/120 (不要与之前deamon.json中的网段有重合),/120网段可以提供 256个的可用地址
然后把这个IPv6内网地址段(fc00:32:1:1::/120) 利用 ip6tables -t nat 的指令(同上)将该地址段成功添加到host 寄主机中的 IPv6 nat配置中即可
之后再用 ip6tables -t nat -L 查看是否添加成功
最后利用访问一些公网的IPv6地址来测试网络是否搭建成功即可。