[求助]宿主机无法 ping 通 docker 的 ubuntu 容器

157 天前
 zcion

环境

windows11 wsl2 + docker desktop + ubuntu22.04

docker 拉取的 ubuntu 镜像是在原有 ubuntu22.04 的基础上自己 apt install 了一些常用工具的镜像。

问题

通过 docker 创建 ubuntu 容器 ubuntu_b,以下是其网络配置信息:

在宿主机中(wsl2 环境) ping ubuntu_b 的 ip ( 172.17.0.3 )无法 ping 通,但 ping 其网关( 172.17.0.1 )却 ping 的通.

宿主机( 172.20.166.206 ) ping ubuntu_b 容器:

同时用 tcpdump 抓包:

宿主机 ping 网关能通:

但在 ubuntu_b 中 ping 宿主机能够 ping 通:

ubuntu_b 中 ping 另一台 ubuntu 容器 ubuntu_c( 172.17.0.2 )也能够 ping 通,并且两者相互 ping 的通。

尝试

自己查看了一些信息,也问了 deepseek ,主要还是说防火墙问题,但以上宿主机和 ubuntu 容器的防火墙都是默认接收所有流量的状态(这里贴的是 ubuntu_c 的,ubuntu_b 没有配置 root 权限无法查看,不过不影响问题的发生,ubuntu_c 同样有以上的问题):

求大佬解答一下!!!

1998 次点击
所在节点    程序员
13 条回复
ThreeSidedCoin
157 天前
桥接网络?
zcion
157 天前
@ThreeSidedCoin 是的,网络模式用的是默认设置
hwdq0012
157 天前
wsl 默认是 nat
docker 默认也是 nat
docker 运行在 wsl 中(如果设置了 docker 和 wsl2 集成的话

host pin 子网 ubuntu ping 不通 是正常的
子网的 ubuntu ping Host 能 ping 能 ping 通,说明子网路由正确


wsl -l -v 可以看到一个 docker desktop 的实例, 你是在 docker desktop 里操作的吗
如果是,我觉得 wsl ping 不通 contianer 是因为 docker 和 wsl 都是 hyper v 的 平级的虚拟网络子网
zcion
157 天前
@hwdq0012 wsl -l -v 默认用的是 ubuntu22.04 的,并没有用 docker-desktop.
docker-desktop 里也是设置的 ubuntu22.04 distros (settings->Resources->WSL integration).
不理解为啥说宿主机 ping 不通容器 ip 是正常,我的理解是,两者都能够 ping 通容器网关(172.17.0.1),那正常来说外部也应该 ping 的通内部
求解答
hwdq0012
157 天前
@zcion
你说的 wsl 里 ping 不通 ubuntu 是 在哪个 wsl 里操作的
你可以在 windows 下用 tracert 172.17.0.3 看看路由是怎么跑的
zcion
157 天前
@hwdq0012
在 ubuntu22.04 里操作的,当时安装 wsl2 用的这个
![Imgur]( )

windows 中 tracert 的结果:
![Imgur]( )

附带 wsl2 中 traceroute 的结果:
![Imgur]( )

突然想起来,因为之前的某些缘故重新卸载在安装过 wsl 过,之后它的网关就有两个了,在 windows 中 ipconfig 的结果:
![Imgur]( )

感谢大佬解答
yinmin
156 天前
docker 28.0 的 iptables 防火墙规则改了,默认不允许 ip forward 到容器里了。

你试试在 docker host 里加一条防火墙规则:

iptables -I DOCKER-USER -d 172.17.0.0/24 -j ACCEPT
yinmin
156 天前
我可能知道原因了,你的 windows 路由有问题。另外:172.30.0.1 不是你的 docker ,是你宽带电信营运商的某台服务器。你完全关闭 docker 和 wsl2 ,或者换一台别的电脑,然后 ping 172.30.0.1 也能 ping 通。
bingfengfeifei
156 天前
没用过这种环境,你可以先在 wsl2 环境中 排查下。
使用 ip route 命令看下路由表发出来,然后 ip neigh 命令看看 arp 是否通了,MAC 获取到没。
然后看下 cat /proc/sys/net/ipv4/ip_forward 看下 ip 转发开了没
以及看下 ip link ,docker 用的什么接口
看下 brctl show 网桥
laminux29
156 天前
wsl2 + docker desktop ,你这 Debuff 拉满了。VMware Workstation 也有网络问题。

想要稳定,建议找台大内存的 x99 洋垃圾,安装 PVE 。
XuHuan1025
156 天前
wsl2 遇到过很多问题 还是 vmwarre 好
512357301
156 天前
[两者都能够 ping 通容器网关(172.17.0.1),那正常来说外部也应该 ping 的通内部]
你这很明显有点想当然了,你的容器在 nat 内部,宿主机怎么可能访问到它。。。,除非开启端口转发,否则 nat 网络无解,别说 docker 了,虚拟机也是这样的逻辑啊。
另外去复习或者学习下网络拓扑的入门知识吧。
再另外,建议用虚拟机搞 docker 吧,wsl 坑挺多,不如虚拟机。
siweipancc
156 天前
……你要是不懂网络可以换成 mirror 网络模式

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1123205

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX