docker-compose运行时无法连接Mongo报错connect EHOSTUNREACH求助
问题排查结论
你当前使用的数据库连接字符串mongodb://mongo:27017/checki配置正确,无需修改,报错主要由以下原因导致:
- 服务启动顺序无保证:
app服务在mongo容器进程还未完成初始化、未开放端口监听时就发起了连接请求 links配置为Docker Compose遗留功能,部分版本Docker引擎对其服务名解析支持不完善,可能导致mongo域名无法正确解析到对应容器IP- 小概率场景为Docker默认分配的
172.25.0.0/16网段和你本地其他网络存在冲突,导致路由不可达
解决方案
方案1:调整Docker Compose配置(优先尝试,解决90%以上同类问题)
修改docker-compose.yml为如下内容,新增健康检查和启动依赖规则:
version: "3.4" services: app: container_name: checki restart: always build: context: . # 构建阶段的host网络配置如果无特殊需求可以删除,不影响运行时逻辑 network: host ports: - "3000:9000" # 替换原有的links配置,指定等待mongo服务健康后再启动 depends_on: mongo: condition: service_healthy mongo: container_name: mongo image: mongo volumes: - ./data:/data/db ports: - "27018:27017" # 新增mongo健康检查规则,确认服务可连接后再标记为健康状态 healthcheck: test: ["CMD", "mongosh", "--eval", "db.adminCommand('ping')"] interval: 2s timeout: 2s retries: 5 start_period: 5s
修改完成后执行以下命令重置项目状态重启:
# 停止并删除旧容器、关联网络 docker-compose down -v # 重新构建镜像并启动服务 docker-compose up --build -d
方案2:网段冲突排查(方案1无效时尝试)
如果执行方案1后仍然报错,说明是Docker网段冲突问题,按以下步骤修复:
- 停止Docker服务
- 执行命令清理残留网桥规则:
iptables -t nat -F POSTROUTING - 编辑Docker daemon配置文件
/etc/docker/daemon.json,新增自定义网段配置:
{ "default-address-pools": [ {"base":"192.168.200.0/24","size":28} ] }
- 重启Docker服务,再次执行方案1的重启命令即可
内容的提问来源于stack exchange,提问作者Fehmy
相关产品推荐
相关产品推荐

