You need to enable JavaScript to run this app. docker-compose运行时无法连接Mongo报错connect EHOSTUNREACH求助
优惠活动
大模型
产品
解决方案
定价
更多

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网段冲突问题,按以下步骤修复:

  1. 停止Docker服务
  2. 执行命令清理残留网桥规则:iptables -t nat -F POSTROUTING
  3. 编辑Docker daemon配置文件/etc/docker/daemon.json,新增自定义网段配置:
{
  "default-address-pools": [
    {"base":"192.168.200.0/24","size":28}
  ]
}
  1. 重启Docker服务,再次执行方案1的重启命令即可

内容的提问来源于stack exchange,提问作者Fehmy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 16:45:04