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

使用NestJS/TypeORM连接Docker中Mongo容器遇MongoServerSelectionError求助

问题描述

使用TypeORM + NestJS连接Docker中的Mongo容器时,持续出现以下错误:

Unable to connect to the database. Retrying (1)... MongoServerSelectionError: getaddrinfo EAI_AGAIN mongo
    at Timeout._onTimeout (/home/waelrabah/upwork_work/spoward/spoward-gql/node_modules/mongodb/lib/core/sdam/topology.js:438:30)
    at listOnTimeout (internal/timers.js:554:17)
    at processTimers (internal/timers.js:497:7) TypeOrmModule

Mongo容器的Docker Compose配置:

mongo:
    image: mongo
    ports:
      - 27017:27017
    command: mongod --auth
    environment:
      # provide your credentials here
      - MONGO_INITDB_DATABASE=spoward
      - MONGO_INITDB_ROOT_USERNAME=SpowardRoot
      - MONGO_INITDB_ROOT_PASSWORD=SpowardRootPass
      
    networks:
      - app-network
    volumes:
      - ./.docker/db:/data/db

当前使用的连接字符串:mongodb://SpowardRoot:SpowardRootPass@mongo:27017/spoward

解决方法
  • 确保NestJS服务与Mongo容器在同一Docker网络
    你的Mongo容器已加入app-network网络,必须给NestJS服务的Docker Compose配置也添加相同网络:

    networks:
      - app-network
    

    只有处于同一Docker网络内,容器才能通过服务名(mongo)互相访问,否则会出现域名解析失败的错误。

  • 若本地直接运行NestJS(非容器化)
    此时无法通过mongo主机名访问容器,需将连接字符串中的主机名改为localhost或本机IP:
    mongodb://SpowardRoot:SpowardRootPass@localhost:27017/spoward
    本地程序不在Docker网络中,只能通过容器映射到宿主机的端口访问Mongo服务。

  • 检查Mongo容器启动状态
    执行docker logs <mongo容器ID/名称>查看容器日志,确认Mongo服务已完成初始化并正常监听连接。如果容器仍在初始化阶段,会导致连接请求重试失败。

  • 验证认证权限
    根账号(MONGO_INITDB_ROOT_USERNAME)默认拥有所有数据库权限,但如果出现权限问题,可以在初始化脚本中创建专门的业务账号,绑定spoward数据库的访问权限,避免根账号使用带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 02:20:33