在 Docker 环境中启用 IPv6 支持可以扩展你的网络能力,尤其是在需要同时处理 IPv4 和 IPv6 流量的场景中。本文将详细介绍如何在 Docker 中配置默认的 bridge 网络以及自定义网络来支持 IPv6,并展示通过 IPv6NAT 方式来支持 IPv6 的实战步骤。
Docker 网络背景知识
Docker 网络是一个重要的抽象层,允许容器与宿主机及外部网络通信。Docker 安装完成后,会自动创建三个网络:bridge
、host
和 none
。通过以下命令可以查看:
docker network ls
其中,bridge
是 Docker 的默认网络,容器在没有指定网络时会自动连接到这个网络。默认网络在宿主机上创建了一个名为 docker0
的 bridge 设备,并配置了一个私有网段的网关 IP 地址。
ip addr show docker0
默认网络支持 IPv6
前置条件:确保你的设备被分配了一个 IPv6 地址。通过以下命令查看:
ip addr show
输出的物理网卡信息中,包含 inet6
和 scope global
的行表示该网卡支持 IPv6。注意,IPv6 地址的前缀不能是 /128
,否则建议通过 IPv6NAT 方式支持 IPv6。
配置步骤:
-
修改
/etc/docker/daemon.json
,添加fixed-cidr-v6
配置,值为你的 IPv6 网段的子网(前缀长度最大为/80
)。{ "fixed-cidr-v6": "2xxx:xxxx::/80" }
-
重新加载 Docker 配置:
sudo systemctl reload docker
-
通过以下命令检查是否生效:
docker network inspect bridge
若生效,
EnableIPv6
值为true
,IPAM.Config[1].Subnet
是你配置的fixed-cidr-v6
。
注意事项:
- 如果
/etc/docker/daemon.json
中存在"live-restore": true
字段,可能导致配置不生效。 - 重新加载配置时,如果存在运行的容器,也可能导致配置不生效。
额外配置:
-
在
/etc/sysctl.conf
中添加以下行,并执行sysctl -p
,配置宿主机和docker0
网卡支持 NDP proxy: