需求:在 Docker 环境下启用 IPv6,使基于 nginx 的容器服务可通过 IPv6 访问。
为网络启用 IPv6
添加 enable_ipv6: true 并配置 ipam。
设置子网前缀为 fd00:abcd::/64。
1
2
3
4
5
6
7
8
| networks:
my-network:
driver: bridge
enable_ipv6: true
ipam:
driver: default
config:
- subnet: "fd00:abcd::/64"
|
在项目前端的 nginx 配置中,增加 IPv6 监听:
1
2
| listen 80;
listen [::]:80 ipv6only=on;
|
enable_ipv6: true + ipam.subnet:告诉 Docker 网络为容器分配 IPv6 地址并(可选)使用指定前缀。- nginx 增加
listen [::]:80:容器内 nginx 需要监听 IPv6 地址,否则即使容器有 IPv6 也无法响应 IPv6 请求。
配置 Docker Engine
必须在 Docker 引擎启用 IPv6,否则容器不会拿到 IPv6 地址。在 /etc/docker/daemon.json 中加入:
1
2
3
4
| {
"ipv6": true,
"fixed-cidr-v6": "fd00:abcd::/80"
}
|
然后重启 docker:
1
2
| sudo systemctl daemon-reload
sudo systemctl restart docker
|
重新启动容器与测试
重建并启动:
1
2
| docker compose down
docker compose up -d --build
|
查看网络与容器 IPv6:
1
2
| docker network inspect 网络名
docker inspect -f "{{range .NetworkSettings.Networks}}{{.GlobalIPv6Address}}{{end}}" 容器名
|
访问(强制 IPv6):
1
| curl -6 http://[容器_IPV6]/
|