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

尝试连接Docker容器内MongoDB时出现getaddrinfo ENOTFOUND mongo错误

解决Docker容器内MongoDB连接错误:getaddrinfo ENOTFOUND mongo

问题说明

连接Docker容器中的MongoDB时出现getaddrinfo ENOTFOUND mongo错误,本质是DNS无法解析mongo主机名,核心原因是容器间网络连通性配置不当。以下是针对你的配置给出的解决方案:

解决方案

1. 确保应用与MongoDB在同一Docker Compose网络中

如果你的应用也是容器化部署,必须将其添加到同一个docker-compose.yml的services节点下。Docker Compose会自动为同配置内的服务创建共享网络,此时应用容器就能通过服务名mongo访问数据库。修改后的配置示例:

version: '3.9'
services:
  mongo:
    image: mongo:latest
    restart: always
    container_name: mongodb
    ports:
      - '27017:27017'
    volumes:
      - mongodb:/data/db
    environment:
       MONGO_INITDB_ROOT_USERNAME: hazem 
       MONGO_INITDB_ROOT_PASSWORD: 123  
       MONGO_INITDB_DATABASE: DB 
  # 添加你的应用服务
  app:
    build: . # 替换为你的应用构建路径或镜像名称
    restart: always
    depends_on:
      - mongo # 确保MongoDB优先启动
volumes:
  mongodb: {}

2. 若应用在宿主机运行,修改连接地址

如果直接在宿主机运行应用(非容器化),无法通过Docker服务名mongo访问,需将连接字符串中的mongo替换为localhost或宿主机IP:

export const connectDB = async () => {
  try {
    await mongoose.connect("mongodb://hazem:123@localhost:27017/DB");
    console.log("connected to DB");
  } catch (error: any) {
    console.log(error.message);
    setTimeout(connectDB, 5000);
  }
};

3. 手动将应用容器加入MongoDB所在网络

如果应用容器是单独启动的,先查看MongoDB容器所属网络:

docker inspect mongodb | grep Networks

然后将应用容器加入该网络:

docker network connect <查到的网络名称> <你的应用容器名>

4. 确认MongoDB容器正常运行

执行以下命令检查容器状态,确保它处于Up状态:

docker ps

若容器未启动,执行启动命令:

docker-compose up -d mongo

内容的提问来源于stack exchange,提问作者Hazem Ben Abdelhafidh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:45:48