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

Docker Compose部署Node.js+MongoDB应用连接失败求助

问题解决:Node.js应用无法连接Docker Compose部署的MongoDB

核心问题定位

错误日志明确显示MongooseServerSelectionError: getaddrinfo ENOTFOUND mongo,说明你的Node应用在尝试解析名为mongo的主机,但Docker Compose配置中Mongo服务的名称是mongo-db,导致DNS解析失败,无法建立连接。

分步解决方案

1. 修正MongoDB连接字符串

确保Node代码中的连接字符串与Docker Compose里的服务名称严格一致:

mongoose.connect('mongodb://mongo-db:27017/test', { useNewUrlParser: true });

注意:错误日志显示应用尝试连接mongo:27017,请检查实际代码是否存在拼写错误,比如误将mongo-db写成mongo。

2. 添加Mongo服务就绪等待机制

depends_on仅保证服务启动顺序,不保证MongoDB完全初始化完成。可以通过两种方式解决:

  • 在Node代码中添加重连逻辑:
    const connectWithRetry = () => {
      mongoose.connect('mongodb://mongo-db:27017/test', { useNewUrlParser: true })
        .then(() => console.log('MongoDB连接成功'))
        .catch(err => {
          console.log('连接失败,5秒后重试:', err);
          setTimeout(connectWithRetry, 5000);
        });
    };
    connectWithRetry();
    
  • 使用等待脚本:
    修改Dockerfile-node,加入wait-for-it脚本等待Mongo服务就绪后再启动应用:
    FROM node:15.3.0
    
    WORKDIR /app
    
    # 下载并赋予执行权限
    ADD https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh /app/wait-for-it.sh
    RUN chmod +x /app/wait-for-it.sh
    
    COPY package*.json ./
    RUN npm install
    COPY . .
    
    EXPOSE 3000
    
    # 等待mongo-db:27017就绪后启动应用
    CMD ["./wait-for-it.sh", "mongo-db:27017", "--", "node", "app.js"]
    

3. 简化MongoDB服务配置(可选)

自定义的Dockerfile-mongo没有必要,官方mongo:4.4镜像已默认配置数据卷和启动命令,可直接在docker-compose.yml中使用官方镜像,减少自定义配置的潜在问题:

version: '3'
services:
  node-app:
    build:
      context: .
      dockerfile: Dockerfile-node
    ports:
      - 3000:3000
    depends_on:
      - mongo-db
    networks:
      - mongo-db
  mongo-db:
    image: mongo:4.4
    ports:
      - 27017:27017
    volumes:
      - mongo-data:/data/db
    networks:
      - mongo-db
volumes:
  mongo-data:
networks:
  mongo-db:
    name: mongo-db

验证步骤

  1. 停止当前运行的容器:docker-compose down
  2. 按照上述修改调整代码和配置文件
  3. 重新构建并启动服务:docker-compose up --build
  4. 查看日志,确认Node应用成功连接MongoDB

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 20:40:30