1、绪论
在 Docker 容器或群服务中使用 IPv6 之前,您需要在 Docker 守护进程中启用 IPv6 支持。之后,您可以选择对任何容器、服务或网络使用 IPv4 或 IPv6(或两者)
2、配置默认 Docker IPv6
注意:IPv6 网络仅在 Linux 主机上运行的 Docker 守护程序上受支持。
2.1、编辑/etc/docker/daemon.json
编辑/etc/docker/daemon.json
,将ipv6密钥设置为true和fixed-cidr-v6您的 IPv6 子网的密钥。在此示例中,我们将其设置为2607:f0d0:1002:51::/66
{
"experimental": true,
"ipv6": true,
"ip6tables": true,
"fixed-cidr-v6": "2607:f0d0:1002:51::/66"
}
这里ip6tables是指由 Docker 自动配置 IPv6 的防火墙规则,如果你希望自己手动配置,请改为 false 或者移除此项,否则容器将无法连接 IPv6 网络;
fixed-cidr-v6 则是我们划分的子网段的第一个,fixed-cidr-v6将分配给默认的 docker 桥接网络,docker 0.
2.2、重新加载 Docker 配置文件。
$ systemctl reload docker
2.3、查看docker网络
执行命令docker network ls。除非您之前创建了自己的自定义网络,否则您将看到以下内容:
[root@localhost deploy]# docker network ls
NETWORK ID NAME DRIVER SCOPE
76c3482e860e bridge bridge local
ffc8043b2395 host host local
3ab57d30d24a monitoring bridge local
44d8fefb76f4 none null local
2.4、检查默认的 docker ‘bridge’ 网络
检查默认的 docker ‘bridge’ 网络docker network inspect bridge。您应该会看到列出了您选择的 IPv6 网络以及网关地址。
[root@localhost deploy]# docker network inspect bridge
[
{
"Name": "bridge",
"Id": "76c3482e860e7787f85da0892d9f2c6f967ceeb252a6dc7f789c923d02fc2f9e",
"Created": "2022-12-01T14:23:31.16878297+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": "2607:f0d0:1002:51::/66",
"Gateway": "2607:f0d0:1002:51::1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {},
"Options": {
"com.docker.network.bridge.default_bridge": "true",
"com.docker.network.bridge.enable_icc": "true",
"com.docker.network.bridge.enable_ip_masquerade": "true",
"com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
"com.docker.network.bridge.name": "docker0",
"com.docker.network.driver.mtu": "1500"
},
"Labels": {}
}
]
- docker0 网络是默认的桥接网络。默认情况下,分配给它的容器现在将具有与本地网关和彼此之间的 IPv4 和 IPv6 连接。
- 但是,由于 docker0 网络的限制,docker 的建议是该网络不应在生产环境中使用,而应使用用户定义的桥接网络。在下一节中,我将构建一个这样的自定义网络。
3、配置 Docker Compose 的 IPv6 支持
networks:
example:
enable_ipv6: true
driver: bridge
driver_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