Docker容器内无法ping通IPv6的问题排查求助
问题描述
我本地用Rancher Desktop运行一个Oracle Linux 7系统的Docker容器,容器内执行ifconfig的输出如下:
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500 inet 172.17.0.2 netmask 255.255.0.0 broadcast 172.17.255.255 ether 02:42:ac:11:00:02 txqueuelen 0 (Ethernet) RX packets 2310 bytes 331965 (324.1 KiB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 2302 bytes 427593 (417.5 KiB) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0 lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 inet 127.0.0.1 netmask 255.0.0.0 loop txqueuelen 1000 (Local Loopback) RX packets 0 bytes 0 (0.0 B) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 0 bytes 0 (0.0 B) TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
当执行ping6 ipv6.google.com时,出现如下错误:
ping: ipv6.google.com: Name or service not known
补充说明:我试过Stack Overflow上的《Docker ping ipv6 endpoint》方案,本地机器和容器内原本都没有/etc/docker/daemon.json文件,我在两边都创建了该文件并添加了文中内容,但问题仍未解决。
解决方案
- 核心问题确认:从
ifconfig输出能看到,容器的eth0网卡只有IPv4地址,没有分配IPv6地址,这是无法使用IPv6的根本原因。Rancher Desktop默认未启用IPv6网络,普通Docker的daemon.json配置不适用于它。 - 启用Rancher Desktop的IPv6:
- 打开Rancher Desktop设置界面
- 切换到
Docker标签页 - 勾选
Enable IPv6选项 - 点击
Apply & Restart重启服务
- 验证容器IPv6地址:重启后重新启动容器,执行
ip -6 addr查看是否有IPv6地址分配。如果仍未分配,手动创建IPv6网络并运行容器:# 创建自定义IPv6网络 docker network create --ipv6 --subnet=fd00::/80 myv6net # 使用该网络启动容器 docker run -it --network=myv6net oraclelinux:7 - 配置IPv6 DNS解析:如果容器能获取IPv6地址但仍无法解析域名,检查容器内
/etc/resolv.conf,确保包含IPv6 DNS服务器。也可以在启动容器时直接指定:docker run -it --dns=2001:4860:4860::8888 oraclelinux:7 - 检查宿主机IPv6状态:确保Mac本地已启用IPv6,路径:系统偏好设置 -> 网络 -> 当前网络 -> 高级 -> TCP/IP,确认
Configure IPv6设置为自动或手动配置正确地址。
内容的提问来源于stack exchange,提问作者tryingToLearn
相关产品推荐
相关产品推荐

