docker-compose up启动容器报sandbox接口路由冲突如何解决
故障原因
该报错本质是IP网段路由冲突:你新增的mumble自定义bridge网络,Docker默认自动分配的网段为172.18.0.0/16,但该网段对应的路由规则已经在当前网络命名空间中存在,来源通常是两类:
- 之前创建过的Docker网络未被完全清理,残留了对应网段的路由规则、虚拟网卡
- 宿主机上其他网络服务(VPN、其他虚拟化软件、本地局域网互联接口)已经占用了
172.18.0.0/16网段
Docker尝试给botamusique容器分配172.18.0.3/16地址时,检测到同网段已经存在指向172.18.0.1的路由条目,无法写入新的接口地址规则,因此容器启动失败。
排查步骤
- 执行
ip route show查看宿主机全局路由表,定位目标为172.18.0.0/16的路由条目,确认其对应的网络接口来源。 - 执行
docker network ls列出所有已存在的Docker网络,再通过docker network inspect 网络ID逐个查看网络的网段配置,确认是否有其他Docker网络占用了172.18.0.0/16段。 - 执行
docker ps -a查看是否有处于异常退出、僵死状态的容器残留了对应网络的veth端点。
修复方案
根据排查到的冲突来源对应处理:
- 冲突来源为Docker残留资源
- 先在docker-compose.yml所在目录执行
docker-compose down停止关联的所有容器 - 执行
docker network prune -f清理所有未被容器使用的闲置网络,若定位到明确占用冲突网段的废弃网络,可直接执行docker network rm 冲突网络ID手动删除 - 重启Docker服务:
systemctl restart docker - 重新执行
docker-compose up -d启动服务即可。
- 先在docker-compose.yml所在目录执行
- 冲突来源为宿主机其他服务/网络
不要使用Docker自动分配的网段,手动给自定义mumble网络指定一个未被占用的私有网段即可,修改docker-compose.yml的顶层networks配置(服务下挂载的网络配置无需改动),示例如下:
配置里的# 原有services块下的murmur、botamusique配置保持不变 networks: mumble: driver: bridge ipam: driver: default config: - subnet: 172.27.0.0/16 gateway: 172.27.0.1subnet可以换成你宿主机路由表中不存在的任意私有网段,比如10.10.0.0/16、172.20.0.0/16到172.31.0.0/16之间未被占用的段都可以。修改完成后执行docker-compose up -d重新启动服务即可。
内容的提问来源于stack exchange,提问作者user10706046
相关产品推荐
相关产品推荐

