Docker 使用 IPv6
最近发现运营商 IPv6 覆盖的已经很全面了,手机和家庭宽带实测都可以互访。刚好手头闲置一个小服务器,配置一下,专门用作IPv6线路的服务给自己使用。
Docker 默认只支持 IPv4,所以需要修改一下配置文件(/etc/docker/daemon.json
)才能实现 IPv6 的支持:
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"registry-mirrors": ["https://ustc-edu-cn.mirror.aliyuncs.com", "https://ghcr.io"]
}
虽然 IPv6 公网IP非常丰富,给每个容器都分配公网IP也没问题,但出于安全考虑,容器还是应该用内网IP,所以配置文件中的前缀使用"fc00::/80"至"fd00::/80"之间的私有网段。
设置以后重启一下服务:
$ sudo systemctl daemon-reload
$ sudo systemctl restart docker
查看一下 docker0 的接口信息,可以看到 inet6 fd00::1/80 scope global
:
$ ip addr show docker0
6: docker0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:02:23:0e:e3:6e brd ff:ff:ff:ff:ff:ff
inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
valid_lft forever preferred_lft forever
inet6 fd00::1/80 scope global
valid_lft forever preferred_lft forever
inet6 fe80::42:34cc:fe00:e36e/64 scope link
valid_lft forever preferred_lft forever
inet6 fe80::1/64 scope link
valid_lft forever preferred_lft forever
然后部署容器,就可以用主机的IPv6加端口号访问了。
注意
有些镜像自身没有对 IPv6 做支持,所以不论怎么部署都没法用 IPv6 访问,比如我此前常用的 dehy/adminer
就存在这个问题,而 Docker 官方维护的 adminer 镜像就可以正常使用。
IPv6 基础
地址组成 x:x:x:x:x:x:x:x 共8组x,每个x是16位,共计128位。
2409:8e1a:3dd2:c8a0:12a0:c9cc:fde2:324/64
最后的 /64
表示地址中前 64 位是前缀,即 2409:8e1a:3dd2:c8a0
是固定的前缀。
会员讨论区