============
== 白菜 ==
============
一个勤奋的代码搬运工!

为 Docker 容器加入 IPv6 网络

技术分享 Docker

环境: debian12

启用 Docker daemon IPv6 支持

编辑 /etc/docker/daemon.json,添加 IPv6 配置:

{
  "ipv6": true,
  "fixed-cidr-v6": "2001:db8:2::/64"
}

然后重启 Docker:

systemctl restart docker

⚠️ fixed-cidr-v6 必须指定一个 IPv6 子网,不然 Docker 不会给容器分配 IPv6。


创建支持 IPv6 的自定义网络

docker network create \
  --driver bridge \
  --subnet 172.19.0.0/16 \
  --gateway 172.19.0.1 \
  --ipv6 \
  --subnet 2001:db8:2::/64 \
  --gateway 2001:db8:2::1 \
  myip_v6
  • --ipv6 → 开启 IPv6
  • --subnet / --gateway → IPv4
  • --subnet-ipv6 / --gateway-ipv6 → IPv6 子网

如果你看到 unknown flag,说明你的 Docker 版本不支持在命令行直接指定 IPv6 子网


旧版本 Docker 可以这样操作:

  1. 先启用 daemon IPv6(上一步)
  2. 创建网络时只用 --ipv6,Docker 会自动分配 IPv6:
docker network create --driver bridge --ipv6 myip_v6
  1. 查看 IPv6 分配:
docker network inspect myip_v6
  • Docker 会在网络里给每个容器分配 GlobalIPv6Address
  • 如果需要特定子网,必须升级 Docker

临时生效: 把当前运行的容器加入网络

docker network connect myip_v6 mycontainer

长期生效: 在 docker-compose.yml 中添加

如果你希望每次用 docker-compose up 都自动连接 IPv6 网络,需要修改 docker-compose.yml

version: "3.9"
services:
  myservice:
    image: your_image
    networks:
      - myip
      - myip_v6  # 添加 IPv6 网络

networks:
  myip:
    driver: bridge
  myip_v6:
    external: true  # 使用你已经创建的 IPv6 网络
  • external: true → 表示使用已经存在的 Docker 网络,不让 compose 创建新网络
  • 这样启动容器时就自动连接 IPv6 网络,不用每次手动执行 docker network connect