使用 docker-compose 或者使用了docker network的同学经常会发生这样一件事情,当compose或者 docker network create 后,突然间服务器就没有反应了,随之而来的就是。
huangs-MBP:~ huangdehui$ ping 10.88.88.88
PING 10.88.88.88 (10.88.88.88): 56 data bytes
Request timeout for icmp_seq 0
Request timeout for icmp_seq 1
Request timeout for icmp_seq 2
Request timeout for icmp_seq 3
整台服务器,就直接从网络中消失了。
解决方式
控制台输入
docker inspect --format='{{.Name}} - {{range.IPAM.Config}}{{.Subnet}}{{end}}' $(docker network ls --format='{{.ID}}')
得到以下信息,将docker的网桥地址全部打印出来,找出会导致冲突的桥,我这里的情况是192.168.0.0/20这个桥冲突导致我失去对服务器的网络访问。
bridge:172.30.0.0/24
docker_gwbridge:192.168.16.0/20
host:
ingress:10.0.0.0/24
mariadb_default:172.19.0.0/16
none:
portainer_agent_network:10.0.1.0/24
renren_tel_api_default:192.168.0.0/20
tel:172.22.0.0/16
tel_api_default:172.21.0.0/16
删除该桥
[root@portal ~]# docker network rm renren_tel_api_default
renren_tel_api_default
避免下次再出现这样的情况
进入 /etc/docker
[root@portal docker]# tree /etc/docker
/etc/docker
├── daemon.json
└── key.json
daemon.json这个文件如果存在直接改daemon.json中的内容,如果不存在 touch daemon.json,指定网桥的地址值,注意网段设置,避免它在出现会导致冲突的ip。
{
"default-address-pools": [
{
"base": "172.30.0.0/16",
"size": 24
}
]
}
然后重启服务器,重启docker,即可。
补充一个实用命令,查看所有容器IP
docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)