由docker-compose导致的网络故障
环境说明:
跳板机上以docker-compose运行挺多的运维服务,这台跳板机同时可以登录其他主机,使用的阿里云
故障:某天早上连不上其他主机,提示 Destination Host Unreachable
做了一些操作后,比如停止docker服务,iptables 清空,还是没有解决问题,重启跳板机,ping 其他主机提示目的不可达
64 bytes from 172.25.27.139: icmp_seq=21 ttl=63 time=1.48 ms
64 bytes from 172.25.27.139: icmp_seq=22 ttl=63 time=1.47 ms
64 bytes from 172.25.27.139: icmp_seq=23 ttl=63 time=1.46 ms
From 172.25.0.1 icmp_seq=24 Destination Host Unreachable
From 172.25.0.1 icmp_seq=25 Destination Host Unreachable
From 172.25.0.1 icmp_seq=26 Destination Host Unreachable
网上查询的结果是有可能docker的网络影响到主机的路由,查询路由
route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.4.255.253 0.0.0.0 UG 0 0 0 eth0
10.4.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-b435843911cc
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-0a3c277df966
172.23.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-ffaa0000a438
172.23.0.0的网段和其他主机属于一个网段,是docker-compose占用了主机的网段导致网络不通
查询docker的ip地址,看看是哪个docker-compose引起的,找172.23.0.0这个网段,等会改动docker-compose的网络。找到这个服务,先停止
docker ps | awk ‘NR>1{print $1}’ | xargs docker inspect -f ‘ ‘ |
docker ps|awk 'NR>1{print $1}'|xargs docker inspect -f '\{\{.Name\}\} \{\{range .NetworkSettings.Networks\}\}\{\{.IPAddress\}\}\{\{end\}\}'
docker-compose down
还有一种方法查找docker使用的ip地址
docker network ls
route -n
查看br虚拟网络,brctl可以通过命令 yum install -y bridge-utils 安装
brctl show
bridge name bridge id STP enabled interfaces
br-ffaa0000a438 8000.02422acd7a5d no
现在的br网络已经没有服务占用,下面删除
ifconfig br-ffaa0000a438 down
brctl stp br-ffaa0000a438 off
brctl delbr br-ffaa0000a438
route -n 查询已经没有了
最后更改docker-compose的网段
version: '3'
services:
something:
container_name: something
image: something:202304061400
restart: always
volumes:
- /data/logs:/app/log
extra_hosts:
- "mysql-svc:10.20.100.100
networks:
- some
networks:
some:
driver: bridge
ipam:
driver: default
config:
- subnet: 192.168.20.0/24
也可以更干脆些,network_mode: “host” ,使用主机网络模式,这样不会产生这个问题
更改网络配置后,再docker-compose up -d,查看服务的ip
参考