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

Mac M1下Docker Compose部署MongoDB Node报ENOTFOUND mongo1错误

问题原因
  • YAML配置缩进错误:networks、volumes配置块被错误放在services层级下,属于无效配置,Docker Compose不会按预期创建自定义retro网络,服务域名解析规则异常。
  • 核心解析逻辑不匹配:mongo1是Docker内置DNS为同一自定义网络内容器提供的内部域名,仅对同一网络内的容器生效。如果Node.js直接运行在M1 Mac宿主机、没有部署到对应Docker网络中,宿主机本身不存在这条DNS记录,自然会报getaddrinfo ENOTFOUND mongo1的错误。
  • 之前尝试配置的container-name、hostname参数仅修改容器内部的主机标识,不会同步到宿主机的解析规则,无法解决宿主机访问的解析问题。
  • 副本集隐藏坑:MongoDB副本集会在初始化时记录节点的访问地址,如果初始化时填的是容器内部域名,客户端建立连接后会拿到这个内部地址做后续通信,宿主机访问时依然会触发解析错误。
修复方案

根据Node.js的部署方式二选一操作即可:

场景1:Node.js直接运行在Mac宿主机(非容器化)

  1. 先修正docker-compose.yml的缩进错误,将networks、volumes块调整到与services平级的顶层位置,修正后配置如下:
services:
  mongo1:
    image: mongo:latest
    command: ["--replSet", "test-replica-set", "--bind_ip_all", "--port", "27017"]
    volumes:
      - mongodbdata1:/data/db
    ports:
      - "27017:27017"
    networks:
      - retro
  redis:
    image: redis:6.0.0
    ports:
      - '${REDIS_PORT:-6379}:6379'
    networks:
      - retro

  dependencies:
    image: dadarek/wait-for-dependencies
    depends_on:
      - mongo1
      - redis
    networks:
      - retro
    command: mongo1:27017 redis:6379

networks:
  retro:

volumes:
  mongodbdata1:
    driver: local
  1. 停掉原有容器,重新执行docker-compose up -d启动服务。
  2. 进入mongo1容器初始化副本集,注意节点地址填宿主机可访问的127.0.0.1,避免后续客户端拿到内部域名解析失败:
# 替换为实际的mongo1容器名,可通过docker ps查看
docker exec -it <mongo1容器ID> mongosh
# 在mongosh交互界面执行初始化命令
rs.initiate({
  _id: "test-replica-set",
  members: [{ _id: 0, host: "127.0.0.1:27017" }]
})
  1. 修改Node.js项目中的MongoDB连接串,主机名填127.0.0.1即可,示例:
mongodb://127.0.0.1:27017/你的业务库名?replicaSet=test-replica-set

场景2:Node.js同样为容器化部署,通过该Compose文件管理

  1. 同样先修正上述YAML缩进错误。
  2. 在services块中新增Node.js应用的服务配置,将其也加入retro网络,配置depends_on关联mongo1与redis服务即可。
  3. 副本集初始化时节点地址直接填mongo1:27017,Node.js应用内的MongoDB连接串主机名也填mongo1,同一网络内的Docker DNS会自动完成解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:22:01