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

Win10下Docker部署MongoDB副本集报getaddrinfo ENOTFOUND错误

Windows 10 环境下 Mongo 副本集连接报错解决方案

问题根因

Mongo 副本集建立初始连接后,客户端会直接读取副本集配置中存储的成员地址发起直连,不会一直使用你输入的 localhost:27017 地址。你当前副本集配置里存的成员地址是 mongo_replica_1:27017、mongo_replica_2:27018、mongo_replica_3:27019,这三个是 Docker 内部网络的主机名,仅容器之间可解析,Windows 本地无法直接识别,所以会报 getaddrinfo ENOTFOUND 错误。你之前在 Mac 上加 hosts 生效的逻辑在 Windows 上同样适用,没生效基本是操作步骤有误。


操作步骤(和 Mac 实现逻辑一致)

按以下流程操作,规避路径、权限、缓存类常见问题:

  • 用管理员权限打开文本编辑器:右键开始菜单选择「Windows 终端(管理员)」,或者找到记事本图标右键选择「以管理员身份运行」,不要直接双击打开编辑器,否则没有修改系统文件的权限。
  • 在编辑器中打开 hosts 文件,固定路径为:
    C:\Windows\System32\drivers\etc\hosts
    如果打开文件夹看不到文件,先勾选文件资源管理器的「隐藏的项目」选项。
  • 在文件最末尾新增三行映射规则:
    127.0.0.1 mongo_replica_1
    127.0.0.1 mongo_replica_2
    127.0.0.1 mongo_replica_3
    
    保存时确认文件类型选择「所有文件」,不要存成hosts.txt后缀,否则系统不会加载该配置。
  • 保存文件后,在管理员终端执行以下命令刷新本地 DNS 缓存,hosts 规则修改后不会自动立刻生效:
    ipconfig /flushdns
    
  • 验证解析是否生效:终端执行 ping mongo_replica_1,如果返回的解析地址是 127.0.0.1 说明配置成功。
  • 打开 Mongo Compass,连接串填写:
    mongodb://localhost:27017/?replicaSet=dbrs
    注意必须带上副本集名称参数 replicaSet=dbrs,否则客户端不会触发副本集节点发现逻辑。

如果你用的是 WSL2 后端的 Docker Desktop,还需要额外进入 WSL 终端,编辑 WSL 内部的 /etc/hosts 文件,加上同样的三行映射,执行 wsl --shutdown 重启 WSL 后再启动 Docker 即可,避免 WSL 层的 DNS 缓存拦截解析。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 00:51:17