Loading... > 转载自:https://zhuanlan.zhihu.com/p/451941171 docker[0](https://link.zhihu.com/?target=https%3A//blog.qiyutech.tech/202112/30_docker_ipv6/%23id8)默认不开启 IPv6 配置, 但是在某些场景我们又需要 IPv6 网络的支持, 特别是随着 IPv6 的普及,以后使用 IPv6 的场景会越来越多。 > 注解 > 本教程假设您的服务器拥有公网 IPv6 地址段, 并且 IPv6 地址段为: 1111:1111:1111:1111::/64 ## Docker 启用 IPv6 支持 首先编辑`/etc/docker/daemon.json`文件,把如下配置添加到配置文件中: > 注解 > 如果 `/etc/docker/daemon.json` 文件不存在,手动创建即可。 重启 docker 服务`systemctlrestartdocker`。 ## 宿主服务器配置 如果我们的 Docker 容器需要使用 IPv6 公网地址, 我们还需要配置宿主机器的 路由/转发 规则,允许宿主机 路由/转发 Docker 容器的 IPv6 流量。 > 注解 > 这里我们这里假设宿主机的默认 IPv6 网卡名称为 `eth0`。 ## `/etc/sysctl.conf` 配置 我们需要宿主机允许转发 IPv6 流量 & 邻居发现消息: 使用`sysctl-f`重载系统配置。 ## ndppd 配置 因为 Linux IPv6 的 ndp 邻居发现配置仅允许单个 IP 配置(IPv6`/128`), 因此我们使用`ndppd`守护进程来自动转发邻居发现消息。 > 注解 > 理论上我们也可以手工一条一条的配置所有 IPv6 邻居发现消息转发规则。 `/etc/ndppd.conf`写入如下配置: > 注解 > ndppd 详细配置参见: [**https://****github.com/DanielAdolfs****son/ndppd/blob/master/ndppd.conf-dist**](https://link.zhihu.com/?target=https%3A//github.com/DanielAdolfsson/ndppd/blob/master/ndppd.conf-dist) systemctl restart ndppd ## docker-compose 启用 IPv6 `docker-compose.yaml`可以使用类似如下的配置启用 IPv6 地址: **小技巧:** subnet 中的 IPv6 地址不要直接使用 `1111:1111:1111:1111::/64`, 否则可能会导致路由混乱(Docker 容器无法正常使用 IPv6 网络)。 使用 `1111:1111:1111:1111::/64` 的任意子网段都可以。 > 警告 > `docker-compose` 文件 必须使用 version: 2, version: 3 不支持 `enable_ipv6` 配置 [2](https://link.zhihu.com/?target=https%3A//blog.qiyutech.tech/202112/30_docker_ipv6/%23id11) 。 > 如果您已有旧的容器在运行(网络配置发生了变化),则需要先销毁容器 `docker-compose` `down` 然后再重新创建 `docker-compose` `up`。 ## 实现原理 Docker 启用 IPv6 功能的原理实际就是: 1. 配置宿主机器启用 IPv6 路由/转发 功能 这是必须的,否则宿主机器不会 路由/转发 Docker 的 IPv6 流量。 2. Docker 底层网络实现就是在宿主机器创建网桥 (bridge 模式) 所以一切关于网桥配置的原理都可以应用到这里。 3. 给宿主机配置正确的 路由/转发 规则 最后修改:2022 年 01 月 26 日 02 : 37 PM © 允许规范转载 赞赏 要多恰饭才能长胖 赞赏作者 支付宝微信