必须配置"ipv6":true、"fixed-cidr-v6":"fd00::/80"(或合法子网)、"ip6tables":true三项,缺一不可;需先确保系统ipv6已启用并加载模块,再重启docker验证bridge网络enableipv6为true。
要通过 daemon.json 开启 docker 的 ipv6 网络支持,核心是配置正确、重启生效、并确保底层系统就绪。不是只加一行 "ipv6": true 就能跑通,漏掉关键项容易导致容器获取不到 ipv6 地址,甚至网络不通。
确认系统 IPv6 已启用
先检查内核是否允许 IPv6:
sysctl net.ipv6.conf.all.disable_ipv6
返回 0 表示已启用;若为 1,需执行:
echo 'net.ipv6.conf.all.disable_ipv6 = 0' >> /etc/sysctl.conf sysctl -p
再验证模块加载:
lsmod | grep ipv6
为空则运行 modprobe ipv6,并写入 /etc/modules-load.d/ipv6.conf 持久化。
编辑 /etc/docker/daemon.json
该文件默认可能不存在,直接创建或修改。必须包含以下三项(缺一不可):
-
"ipv6": true—— 启用 IPv6 功能开关 -
"fixed-cidr-v6": "fd00::/80"或你的实际 IPv6 子网(如2001:db8:1::/80) -
"ip6tables": true—— 允许 Docker 管理 IPv6 防火墙规则
⚠️ 注意:
fixed-cidr-v6的前缀长度不能超过/80(Docker 限制),也不能用/128(单地址无效)。推荐用 ULA 地址fd00::/80(本地唯一地址,无需公网前缀),或从路由器分配的全局前缀中截取/80子网(例如2001:db8:abcd::/64→ 取2001:db8:abcd::/80)。
一个可用的最小完整配置示例:
{
"ipv6": true,
"fixed-cidr-v6": "fd00::/80",
"ip6tables": true,
"experimental": true
}
experimental: true 不是必须,但部分 IPv6 高级功能(如--ip6分配固定地址)依赖它,建议加上。
重载配置并验证
保存后执行:
systemctl reload docker # 或更彻底地重启 systemctl restart docker
然后检查 bridge 网络是否生效:
docker network inspect bridge | grep -A 5 "IPv6"
应看到 "EnableIPv6": true 和 "IPAM" 下有 IPv6Config 字段,且分配了 fd00::/80 范围内的子网。
额外提醒
- 如果你用的是 CentOS 8+,NetworkManager 可能干扰,需确认
nmcli dev show | grep IP6显示有效 IPv6 地址 - 容器启动时需显式使用
--ipv6(如docker run --ipv6 -it alpine ping6 -c3 google.com)或指定网络(如--network mynet,该网络需用--ipv6 --subnet=...创建) - Docker Compose 中,旧版
network_mode: "bridge"不继承 daemon.json 的 IPv6 设置,推荐改用自定义网络并声明enable_ipv6: true
不复杂但容易忽略。











