bigywater.tech
Docker · 61

容器的 IPv6:开启条件与地址分配

容器能用 IPv6 吗?默认是关的,怎么打开,打开之后容器之间、容器访问外网各是什么样?这篇用 docker network create --ipv6 实测地址分配、名字解析和外网连通性。

EnableIPv6=false
默认 bridge 网络的 IPv6 开关
fd5c:c1ec:db63::/64
不指定子网时 docker network create --ipv6 自动选出的私有 IPv6 子网
202 ms
容器 ping6 Cloudflare IPv6 DNS 的往返时间(单次测量)

默认没有

实测 · 本机执行输出
  默认 bridge 网络的 EnableIPv6 = false
  容器里 eth0 的 IPv6 地址:无
  容器里 lo 的 IPv6:::1/128
  disable_ipv6(all / eth0):0 / 1
  默认路由(IPv6):没有

默认 bridge 网络的 EnableIPv6 是 false,容器 eth0 上的 disable_ipv6 是 1,没有 IPv6 地址和默认路由;守护进程配置里默认网络选项也是 enable_ipv6=false。

--ipv6 网络

实测 · 本机执行输出
  docker network create --ipv6(不指定子网):退出码 0
  这个网络的 IPAM:172.19.0.0/16 gw=172.19.0.1 ; fd5c:c1ec:db63::/64 gw=fd5c:c1ec:db63::1 ;
  容器 b 的地址:inet 172.19.0.2/16 ; inet6 fd5c:c1ec:db63::2/64 ; inet6 fe80::f8f0:43ff:fe46:50e2/64
  容器 c 的 IPv6 地址:fd5c:c1ec:db63::3
  b ping6 c 的 IPv6 地址:退出码 0;round-trip min/avg/max = 0.102/0.119/0.137 ms
  b 查询 bwlab-c56c 的 AAAA 记录:127.0.0.11:53 fd5c:c1ec:db63::3(退出码 0)
  b ping6 按名字 bwlab-c56c:退出码 0;PING bwlab-c56c (fd5c:c1ec:db63::3): 56 data bytes

创建网络时加 --ipv6,docker 自动分配一个 fd 开头的 /64 子网,容器拿到 IPv4 和 IPv6 两个地址;内置 DNS 对 AAAA 记录返回容器的 IPv6 地址,容器名可以直接用于 ping6。

出网

实测 · 本机执行输出
  容器 b ping6 2606:4700:4700::1111(Cloudflare DNS):退出码 0;round-trip min/avg/max = 202.382/202.382/202.382 ms
  容器 b 的默认 IPv6 路由:default via fd5c:c1ec:db63::1 dev eth0  metric 1024
  守护进程配置(虚拟机里的 daemon.json)中默认网络选项的 IPv6 项:"com.docker.network.enable_ipv6":"false"

这个容器用私有的 fd 地址,仍然 ping6 通了外网的 IPv6 地址,说明出网经过了转换。这个结果依赖我这台 Mac 的网络是否有 IPv6 出口,在没有 IPv6 的网络上可能不通,我只测了一次。

分步演示

容器 IPv6
本步的对象

    本文用到的工具与边界

    • 本机 macOS 27 arm64 / Docker Desktop(Engine 29.8.2,容器跑在 Docker Desktop 自带的 Linux 虚拟机里,内核与宿主机的 macOS 不同);镜像为 linux/arm64;需要看虚拟机内部时用特权容器 + nsenter;计时用 time / date +%s%N,数字每次运行会有小幅抖动。IPv6 信息读自 ip -6 addr / route 和 /proc/sys/net/ipv6;连通性用 busybox 的 ping6 / nslookup -type=AAAA;外网 ping6 只发了 1 个包;子网是 docker 自动选的;实验后已删除容器和网络
    • 没有验证:指定 --subnet 的 IPv6 网络、全局单播地址与路由通告、IPv6 的端口映射、ip6tables 规则、IPv6 在 Linux 宿主机上的行为、没有 IPv6 出口的网络上的表现
    京ICP备2026067502号-1京公网安备11010502063487号