docker容器启用ipv6需宿主机、docker引擎、网络层、应用层四层打通:先确保宿主机有scope global的ipv6地址并能连通外网;再在daemon.json中启用ipv6并配置fixed-cidr-v6;接着创建支持ipv6的自定义网络;最后容器指定该网络并确保应用监听ipv6地址。

要让 Docker 容器真正用上 IPv6,不能只开个开关——得从宿主机、Docker 引擎、网络层到容器应用四层打通。核心是:宿主机先通 IPv6,Docker 才能分地址;引擎配对了,容器才可能拿到公网可路由的 IPv6 地址。
确认宿主机 IPv6 已就绪
这是最容易被跳过的一步,但失败几乎都卡在这里:
- 运行
ip -6 addr show,检查是否有scope global的 IPv6 地址(不是fe80::/10链路本地地址) - 执行
ping6 -c 3 2400:3200::1(阿里云 DNS)或ping6 -c 3 google.com,验证外网连通性 - 若无 global 地址,需联系服务商开通,或在服务器控制面板中启用 IPv6 并填写分配的前缀(如
240e:399:f7b:6d30::/64)
修改 daemon.json 启用 IPv6 分配能力
Docker 默认只分配链路本地 IPv6(fe80::/10),无法对外通信。必须指定一个可路由子网:
- 编辑
/etc/docker/daemon.json(群晖路径为/var/packages/docker/target/docker/daemon.json) - 填入以下最小必要配置(替换
240e:399:f7b:6d30::/64为你实际获得的 IPv6 前缀):{ "ipv6": true, "fixed-cidr-v6": "240e:399:f7b:6d30::/64" } - 加
"ip6tables": true可让 Docker 自动管理 IPv6 防火墙规则,避免容器出向不通 - 保存后执行
sudo systemctl restart docker
创建支持 IPv6 的自定义网络
默认桥接网络(bridge)不自动继承 fixed-cidr-v6,推荐显式创建 IPv6 网络:
- 命令行创建:
docker network create --ipv6 --subnet=240e:399:f7b:6d30::/64 mynet - 宝塔面板用户:进入「Docker 管理器 → 网络 → 创建网络」,勾选「启用 IPv6」,填入相同子网和网关(网关通常为
240e:399:f7b:6d30::1) - 该网络后续供容器使用,比直接依赖默认 bridge 更稳定、更可控
容器与应用层适配要点
即使网络通了,容器内服务若仍绑定 0.0.0.0 或未监听 IPv6,外部仍无法访问:
- 启动容器时指定网络:
docker run --network mynet -p 8080:80 nginx - 使用 docker-compose 时,在
networks下启用:networks:<br> mynet:<br> enable_ipv6: true<br> ipam:<br> config:<br> - subnet: "240e:399:f7b:6d30::/64"
- 应用自身需监听
::(IPv6 any)或具体 IPv6 地址,例如 Redis 配置中写bind ::0,Nginx 中写listen [::]:80;











