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_3hosts.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
相关产品推荐
相关产品推荐

