我的环境:
- OS: CentOS 7.9
- Docker:20.10.7
1. 启用Docker守护进程对ipv6的支持
要想在Docker容器或者Swarm服务中使用ipv6,首先需要在Docker守护进程中启用对ipv6的支持,具体做法如下:
-
编辑docker守护进程的配置文件
/etc/docker/daemon.json
(若不存在需要手动创建该文件){ "experimental": true, "ip6tables": true, "ipv6": true, "fixed-cidr-v6": "2001:db8:1::/64" }
ipv6
设置为true,启用对ipv6的支持。
fixed-cidr-v6
,配置ipv6子网。
ip6tables
,启用ip6tables,docker会在ip6tables中配置docker网络相关的规则链。
experimental
,启用实验特性,ip6tables是docker的一个实验功能,所以需要设为true。 -
重载配置文件
sudo systemctl reload docker && sudo systemctl restart docker
现在你可以使用
docker network create --ipv6 ...
创建一个支持ipv6的网络了。另外你也可以在启动容器时使用--ip6
参数来使容器支持ipv6。 -
审查默认
bridge
网络sudo docker network inspect bridge
可以看到已经配置成功!
接下来就可以在容器中使用ipv6了!
2. 在Docker容器中使用ipv6
注意:以下演示依赖于上一步的配置
2.1 创建一个容器
使用nginx做演示:
启动一个容器,此处并没有指定网络所以默认使用名为bridge
的网络,该网络在上一步已经支持ipv6了!
docker run --name test -p 81:80 -d nginx:1.21.6
进入容器内部查看网阔配置:
$ docker exec -it test ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet