docker网络与局域网网段冲突问题

偶然发现docker中ping不通172网段的ip

[root@6278609c3b1c www]# ping 172.18.5.128
PING 172.18.5.128 (172.18.5.128) 56(84) bytes of data.
From 172.18.0.3 icmp_seq=1 Destination Host Unreachable
From 172.18.0.3 icmp_seq=2 Destination Host Unreachable
From 172.18.0.3 icmp_seq=3 Destination Host Unreachable

发现是因为docker网桥与当前网段冲突了。
经过半天的各种关键词搜索。
找到解决办法,大致就是修改docker网桥配置。即 daemon.json中增加配置 {"bip" : "172.16.10.1/24"}类似配置指定网段

但是本人用的是docker for mac 不太好直接找daemon.json文件 (因为for mac 其实是有个虚拟机的,docker在虚拟机中)
在ui界面中,找到对应配置地方: preferences -> daemon -> advanced 中增加配置即可。
{
"debug" : true,
"experimental" : true,
"bip" : "172.16.10.1/24",
"registry-mirrors" : [

"https://registry.docker-cn.com"

]
}
(ps注意这里一定要检查好,如果导致docker重启不起来,需要工厂化配置)
设置完成后,重启,但是还是不可用。

这就奇怪了,本身就是因为网桥冲突导致的,为啥呢?
本着计算机是不会骗你的原因。
一点点翻docker官方文档,找了半天也没有相关的例子,各大搜索引擎也没搜到,搜到的也是如上的配置。
突然看到network章节,docker netWork create创建网络,灵光一闪,呀我这不是默认网桥,是自己建的网桥。。
自己用类似:
docker netWork create xxx-brige 建的网桥。

原来坑在这里。

找到问题就简单了。

停止所有容器,删除已经建立的网络,重新创建网络。

创建网络时候指定子网,即--subnet 参数
形如:
docker network create \
--driver=bridge \
--subnet=172.28.0.0/16 \
--ip-range=172.28.5.0/24 \
--gateway=172.28.5.254 \
br0

最终搞定了!
总结两点问题:
1,docker网桥与局域网网段冲突。
2,docker network自建网桥,与默认网桥配置不是一回事儿。

发表新评论