将Docker Compose网关容器设为host网络模式时出现路由冲突错误
问题解决办法
错误根源
你把网关容器设置为network_mode: host后,仍保留了networks配置和端口映射,这会导致Docker同时尝试让容器使用宿主机网络栈,又要将它加入自定义的mynet网络并分配该网段的IP,而宿主机已有172.26.0.0/16的路由规则,IP分配直接冲突。
修复步骤
- 修改
docker-compose.yml中网关服务的配置,删除ports和networks字段,添加network_mode: host:
gateway: image: <ms-yarp> environment: - ASPNETCORE_URLS=https://+:443;http://+:80 volumes: - ./tls/:/tls/ network_mode: host restart: on-failure
- 检查宿主机的80、443端口是否被其他进程占用,若有先停止对应进程:
# 检查80端口占用情况 lsof -i :80 # 检查443端口占用情况 lsof -i :443
- 重新部署容器:
docker compose down docker compose up -d
补充说明
network_mode: host模式下,容器直接复用宿主机的网络栈,不需要配置端口映射,容器内的80/443端口直接对应宿主机的同端口。- 该模式下容器无法加入自定义Docker网络,如果你需要网关和其他容器通信,其他容器可以通过宿主机IP访问网关;或者你可以放弃
host模式,改用端口映射+自定义网络的常规配置。
内容的提问来源于stack exchange,提问作者Parsa99
相关产品推荐
相关产品推荐

