You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker部署测试应用时无法连接MongoDB数据库报错求助

问题原因及修复方案

核心错误:主机名不匹配

你在docker-compose中定义的MongoDB服务名称为db,Docker Compose内部网络会使用服务名作为DNS解析域名,但是你db.js中的连接URI写的是mongodb://mongo:27017/prueba-docker,mongo这个主机名不存在,所以触发getaddrinfo EAI_AGAIN域名解析失败错误。

修复方式:修改db.js中的连接URI:

// 替换原uri行
const uri = 'mongodb://db:27017/prueba-docker';

次要问题1:服务启动时序问题

depends_on配置只会保证容器的启动顺序,不会等待MongoDB服务初始化完成、可以正常接收连接后再启动后端服务,也可能偶发连接失败问题。
修复方式:修改docker-compose.yml配置,给db服务增加健康检查,让后端服务等待MongoDB健康后再启动:

version: "3"
services:
  prueba-react:
    image: prueba-react
    build: ./client/
    stdin_open: true
    ports: 
      - "3000:3000"
    networks: 
      - mern-app
  
  prueba-api:
    image: prueba-api
    build: ./server/
    ports: 
      - "3400:3400"
    networks:
      - mern-app
    depends_on:
      db:
        condition: service_healthy
  db:
    image: mongo:4.4-bionic
    ports:
      - "27017:27017"
    networks:
      - mern-app
    volumes:
      - mongo-data:/data/db
    # 新增健康检查配置
    healthcheck:
      test: ["CMD", "mongo", "--eval", "db.adminCommand('ping')"]
      interval: 5s
      timeout: 5s
      retries: 3

networks:
  mern-app:
    driver: bridge

volumes:
  mongo-data:
    driver: local

次要问题2:Dockerfile路径配置错误

server目录下的Dockerfile中WORKDIR usr/app使用了相对路径,可能引发运行时路径异常。
修复方式:修改为绝对路径:

# 替换原WORKDIR行
WORKDIR /usr/app

最后验证步骤

所有修改完成后,执行以下命令清理旧资源并重新启动:

# 停止并删除旧容器、关联卷
docker-compose down -v
# 重新构建镜像并启动服务
docker-compose up --build

启动后查看prueba-api服务日志,出现conected to db即代表连接正常。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 12:48:01