在 Docker Compose 中为项目启用 IPv6 并可通过 IPv6 可访问

需求:在 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]/
使用 Hugo 构建
主题 StackJimmy 设计