Docker Compose容器间通信间歇性中断原因及解决咨询
解决Docker引擎更新重启后容器网络通信故障的方案
1. 配置Docker服务重启后自动刷新容器网络关联
修改Docker的systemd服务配置,让Docker启动后自动重新连接所有容器到对应网络,强制刷新DNS和路由配置:
- 创建并编辑
/etc/systemd/system/docker.service.d/restart-containers.conf(目录不存在则先创建):
[Service] ExecStartPost=/usr/bin/docker network reconnect $(docker network ls -q)
- 重新加载systemd配置并重启Docker:
systemctl daemon-reload systemctl restart docker
2. 为Docker Compose项目配置固定自定义网络
默认Compose会生成随机命名网络,更新后易出现配置不兼容。手动指定固定网络:
在docker-compose.yml中添加如下配置:
version: '3.8' services: web: # 你的web服务原有配置 networks: - prod-fixed-network db: # 你的db服务原有配置 networks: - prod-fixed-network redis: # 你的redis服务原有配置 networks: - prod-fixed-network networks: prod-fixed-network: name: my-production-net driver: bridge ipam: config: - subnet: 172.25.0.0/16
固定网络名称和子网段,避免Docker更新后重新创建网络导致容器失联。
3. 为容器配置自动重启策略
在docker-compose.yml的每个服务中添加restart: always,确保Docker引擎重启后容器自动重启,重新获取最新网络配置:
services: web: restart: always # 其他服务配置
4. 锁定Docker包版本(替代全量关闭yum自动更新)
仅锁定Docker相关包的版本,防止yum自动更新触发故障:
- 安装yum版本锁定插件:
yum install yum-plugin-versionlock
- 查看当前Docker版本:
docker --version,然后锁定对应包:
yum versionlock add docker-ce docker-ce-cli containerd.io
后续仅手动解锁后才能更新Docker包。
5. 配置Docker引擎使用固定外部DNS
修改Docker守护进程配置,指定公共DNS服务器,避免依赖内置DNS服务重启后的解析异常:
编辑/etc/docker/daemon.json(不存在则创建):
{ "dns": ["8.8.8.8", "8.8.4.4"] }
重启Docker服务生效:
systemctl restart docker
内容的提问来源于stack exchange,提问作者DrMeers
相关产品推荐
相关产品推荐

