直接回答:Docker 默认用 172.17.0.0/16 做容器网桥,内网本身也在这个网段时路由会冲突;改 /etc/docker/daemon.json 里的 bip 或 default-address-pools,换个不冲突的网段再重启 Docker 就好了。

遇到的问题

内网做项目集成,范围中有通过docker容器化部署的应用,所以需要安装docker基础环境。

按照官方文档安装后docker后,发现机器无法ping通内网 172.17 网段的时间同步服务器。

问题的排查

1、通过 arp -a 命令查看本机的arp缓冲区内容

img

发现ping 172.17网段机器的请求用的是docker0的网卡(本文截图均为命令演示,非真实问题截图)

2、通过 ip route 命令查看核心路由表

img

发现docker0网卡使用网段为 172.17.0.0/24 网段;所以当机器 ping 172.17 网段服务器时会ping至docker映射网段中,导致实际机器无法连接

问题的解决

把docker0的网段修改为用不到的网段即可

具体操作:

1、关闭docker服务(用到的docker命令详见)

​ (a)查看所有容器 docker ps -a

​ (b)关闭启动的容器 docker stop <容器 ID>

​ (c)查找dockerd进程 ps -ef | grep dockerd

​ (d)杀掉dockerd进程 kill -9 <dockerd服务 pid>

2、删除原有IP配置

​ (a)查看核心路由表 ip route

​ (b)删除docker0 ip及网关设备 ip link set dev docker0 down

3、修改docker配置文件 /etc/docker/daemon.json中的bip配置

​ 修改为用不到的网段,如 192.168 网段

​ {

​ "bip":"192.168.1.100/24"

​ }

4、重启docker服务 dockerd &

5、再次检查核心路由表 ip route

6、ping 172.17网段服务器检查

查找资料时发现还有另外一种 docker_gwbridge 网卡集群冲突的情况,也是同样的修改网段的方式解决,详见 docker网络冲突解决(修改docker_gwbridge网段)

还有一种可能

防火墙规则,这个在NAS上遇到过一次是因为防火墙规则造成的

使用host网络模式可以避免,或者修改防火墙规则

这篇笔记整理自我自己的实践记录,如果做法有出入,或者你踩过别的坑,欢迎到留言板一起聊聊。

站内搜索

没有找到内容!