前言
由于Dokcer的默认配置安装后IPv6是默认关闭状态,如果主机有IPv6的Subnet,希望容器能够支持IPv6的网络通信,则可以通过手动配置来开启Docker的IPv6网络支持。
但是按照Docker官方文档中的描述来启用IPv6会出现一些问题。
由于默认没有配置IPv6的网络转发,当划分的IPv6子网为局域网段时,发现容器IPv6无法正常使用,包括网络通信、容器端口转发等。
环境要求
- 确保你的主机有IPv6的子网(宿主机支持IPv6)
- 已安装的Docker Engine 的版本需要>=20.10.2,因为在这个版本才启用了ip6tables的试验性支持
(如果Docker版本小于20.10.2,则可能需要依赖于第三方的工具来实现IPv6-NAT:docker-ipv6nat)
配置步骤
本文将以Bridge类型的容器网络和 RFC 4193 中描述的局域网IPv6网段(fd00::/8)为例来启用IPv6的容器支持
划分默认容器的IPv6网段
划分一块要使用的局域网子段,这里使用的是 fd00:aa88::/64
Docker将会使用这个网段作为默认网络的IPv6网段
修改Docker的配置文件,启用IPv6支持
配置 /etc/docker/daemon.json
{ "ipv6": true, "fixed-cidr-v6": "fd00:aa88::/64", "experimental": true, "ip6tables": true }
和Docker的文档中不同的是,我们开启了实验特性ip6tables,这样Docker将会像配置IPv4的iptables一样来添加ip6tables的转发规则
然后重启Docker服务,应用更改 systemctl restart docker
查看Docker默认网络的配置
使用inspect查看Docker默认网络的配置,发现已经自动配置了IPv6的Subnet和Gateway,证明IPv6已经启用成功
$ docker network inspect bridge [ { "Name": "bridge", "Id": "5a2b81221f69b0c83cd7948725972ff1670575cc9c0abb29d6322b8c7f188392", "Created": "2023-01-13T19:28:32.384666768+08:00", "Scope": "local", "Driver": "bridge", "EnableIPv6": true, "IPAM": { "Driver": "default", "Options": null, "Config": [ { "Subnet": "172.17.0.0/16", "Gateway": "172.17.0.1" }, { "Subnet": "fd00:aa88::/64", "Gateway": "fd00:aa88::1" } ] }, ...
创建支持IPv6的容器网络
你也可以通过如下命令创建支持IPv6的容器网络,不同的是,对于IPv6网络,你需要自己指定对应的Subnet,但是配置Gateway是可选项(默认是::1为网关地址)
docker network create --ipv6 \ --subnet "fd00:aa88:1::/64" \ --gateway "fd00:aa88:1::1" stardust
在容器中测试IPv6是否成功连通
$ docker run --rm -it alpine /bin/sh -c "ping6 dns.google" PING dns.google (2001:4860:4860::8844): 56 data bytes 64 bytes from 2001:4860:4860::8844: seq=0 ttl=118 time=0.980 ms 64 bytes from 2001:4860:4860::8844: seq=1 ttl=118 time=1.056 ms 64 bytes from 2001:4860:4860::8844: seq=2 ttl=118 time=1.048 ms 64 bytes from 2001:4860:4860::8844: seq=3 ttl=118 time=1.059 ms ^C --- dns.google ping statistics --- 4 packets transmitted, 4 packets received, 0% packet loss round-trip min/avg/max = 0.980/1.035/1.059 ms
其他可参考文档
- Docker开启IPv6:https://docs.docker.com/config/daemon/ipv6/
- Docker Bridge网络配置:https://docs.docker.com/network/bridge/
- RFC-4193:https://www.rfc-editor.org/rfc/rfc4193
文章评论