南方數據技术观察
首页 行业新闻 教程 技术文章 AI 对话 官网 咨询与报价
首页 / 行业新闻

Docker 在 IPv6 单栈环境下的部署实践

作者在 Rocky Linux 8.5 的 IPv6 单栈 VPS 上部署 Docker,解决了容器默认仅支持 IPv4 导致无法拉取镜像与外联的问题,通过 daemon.json 开启 IPv6、配置 ULA 前缀与 IPv6 镜像源,再配合 ip6tables MASQUERADE 实现出站 NAT,使 Alpine 等容器在纯 IPv6 环境正常运行。

守护进程配置与镜像源替换

Docker 默认仅为容器网络分配 IPv4 地址,在纯 IPv6 主机上会导致容器无法解析 registry-1.docker.io(该域名仅返回 A 记录)。在 /etc/docker/daemon.json 中设置 "ipv6": true 并指定 "fixed-cidr-v6": "fd11:2233:4455:6677::/64",为容器分配唯一本地地址(ULA)前缀;同时添加 "registry-mirrors": ["https://mirror.gcr.io"] 指向 Google 的 IPv6 镜像源,解决镜像拉取的 IPv6 连通性。重启 docker 服务后,容器即可获得 fd11:2233:4455:6677::/64 网段地址。

ip6tables 出站 NAT 规则

容器获得 ULA 地址后仍无法直接访问公网 IPv6 资源,需在宿主机添加 NAT 规则。执行 sudo ip6tables -t nat -A POSTROUTING -s fd11:2233:4455:6677::/64 ! -o docker0 -j MASQUERADE,将源地址落在该 ULA 前缀且非经 docker0 接口流出的报文做地址伪装。通过 sudo ip6tables -t nat -L 验证,POSTROUTING 链出现 MASQUERADE all fd11:2233:4455:6677::/64 anywhere 即表示生效。该规则随重启失效,生产环境需配置持久化。

用户权限与安装细节

安装时使用 dnf 而非 yum(CentOS 近期版本不再推荐 yum),依次执行 dnf update、添加 docker-ce 源、安装 docker-ce 并设置开机自启。非 root 用户运行 Docker 需加入 docker 组:sudo groupadd docker 与 sudo usermod -aG docker $USER,随后重新登录生效。原文未给出具体数据,但上述步骤在 Rocky Linux 8.5 上验证通过。

这套配置让 Docker 在无 IPv4 地址的服务器上完整跑通拉取、构建与出站访问,ULA 前缀可自行生成任意 fd00::/8 网段,镜像源亦可替换为其他支持 AAAA 记录的站点。运维人员在部署 IPv6 单栈节点时,只需按此三步骤调整 daemon.json 与 ip6tables,即可避免容器网络孤岛问题。

原文: APNIC Blog(2022-05-23)|编译自 APNIC Blog,事实以原文为准。

来源:APNIC Blog

返回列表