尝试连接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
相关产品推荐
相关产品推荐

