Docker 容器不能ping通默认网关(172.17.0.1)--已解决

(如果想直接解决问题,直接拖到最后,

如果想熟悉一下定位思路前边的也可以顺带看一下)

楼主在全用 docker 时发现自带的网桥在生成 container 后,ping 不通,我的另一篇文章中写了在第一次用 docker 时,如何生新定义一下 bridge,然后配置成 docker 默认的网桥。工作已经正常。

现在楼主有新的需求,要自己重新定义一个新的网络,和默认的网桥的网段不一样, 我目前 默认的网段为 172.16.0.x,

目前想单独创建一个网段给集群用,为 172.15.0.x/24.

网段创建成功: docker network create –subnet=172.15.0.0/24 mynet1

创建 tomcat 容器时也用的这个网络:docker run -d –name tomcatMynet1 –network mynet1 -p 8994:8080 tomcat

但是在进入容器后不能 ping 通 172.15.0.1(但是两个 tomcat 容器之间可以 ping 通)

1
2
3
 [Wed Mar 22 2023 10:22AM (CST+0800)] [7 days, 20:46] :/mnt/e/myhugo  🍣 main   took 3m16s
🌈 docker exec -it tomcatMynet1 ip a
OCI runtime exec failed: exec failed: unable to start container process: exec: "ip": executable file not found in $PATH: unknown

出现这个问题是因为 tomcat 是精简版的,如何解决了执行下面两个命令

1
2
root@c9478f4e83dd:/usr/local/tomcat# apt update
root@c9478f4e83dd:/usr/local/tomcat# apt install -y iproute2

image-20230322103252764

太慢了,浪费生命,更新清华源,试试

1
echo "deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free"> /etc/apt/sources.list

image-20230322103511611

那我就在想,我之前用的

image-20230322103730496

可以 ping 通,新版的内核支持 ping 通。

brctl create 的新的 bridge ,配置给 docker 成为默认的网络,都可以正常工作,为什么现在创建新的网络又不行了呢。

再用 docker network inspect 查看一下能工作和不能工作的 network 对比发现有以下区别:

image-20230322103958873

目前猜测是不是我要创建新网络的时候没有给网关, 加上试一下呢:

image-20230322104345403image-20230322104345603

现在看一下网关是有了。现在用 mynet1 创建一个容器看一下能 ping 能不呢:

~~还是不行,晕了。~~因为我的内核版本是 5.11 已经没有这个问题了。依然可以

再对比看下,发现 option 里好像有好多没有配置:

看了一下不同的地方,左边的意思是说这个网络用的网桥是 br0, 也是就我们创建的那个。

那右边没有网桥信息,怀疑是网桥没有和网络关联起来。

现查看帮助信息,发现有一个-d 选项,配置了后就由 driver 管理网络,试一下呢:

重新创建 mynet2 试下;

=> 步骤不写了,option 还是空,还是 ping 不通。

哪里去改这个 options 呢? 好像没有,

只有请教高人了。

TODO:

找了 2 天,找到了这个文章:

(困扰我几天的问题,希望这次能解决,其实我也想用 virtual box 用新的 centOS 安装试一下,也达到了升级 centOS 的方法,不过这里我还是希望把这个问题解决掉)。

(这两天也问了一个大佧,不过这个人没有回复,也许也太忙,也许是清高,不管怎样人还是要靠自己,没有什么问题是解决不了的,只是时间问题)

https://blog.csdn.net/weixin_42288415/article/details/105366176

现象和我一样,他是通过升级 centOS 内核解决的。

引用文章内容:

那如何升级 centOS 内核呢,相信网上有很多:

https://www.cnblogs.com/xzkzzz/p/9627658.html 这里找了一篇,步骤还是有点多。

待我有空验证一下这个方法:

(就目前 来看,我的一台 ubuntu 机器上 uname -r 是用的 4.18 的内核,docker 映射出的 tomcat 从 window 电脑上也可以访问)

TODO(升级我的 centOS 到 4.18 内核试下):

查看了我的 centOS, 果然是 3.10 的,有希望了:

升级内核试下 根据上边的我那个升级内核的 link, 现在可以看到最新的 kernel 已经是 5.7 了,我的那个太 TM 老了。

现在升级后可以看到,已经是 5.7 的 kernel 了。

那现在来试下 docker 默认的网桥创建的 container 是不是能工作了呢。

从网页访问也可以了:

研究了几天终于找到了根本原因,希望能帮助到遇到同样问题的朋友。如果对你有用请留下你宝贵的脚印,好让我知道 我确认帮助过人。哈哈。

平常在工作中也是经常会处理各种自动化环境问题,解决问题后那种 feel 那是倍爽啊。

版权声明:本文为 CSDN 博主「coolfishbone_joey」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/coolfishbone_joey/article/details/107146839

Licensed under CC BY-NC-SA 4.0
最后更新于 Jan 06, 2025 05:52 UTC
comments powered by Disqus
Built with Hugo
主题 StackJimmy 设计
Caret Up