为何MongoDB用localhost连接失败,替换为127.0.0.1却正常?
MongoDB localhost连接失败改用127.0.0.1成功的原因
从报错信息MongooseServerSelectionError: connect ECONNREFUSED ::1:27017能直接定位核心问题:IPv6与IPv4的解析及监听不匹配,具体原因如下:
1. localhost的解析优先级变化
现代操作系统(以及Node.js 18+版本)中,localhost会优先被解析为IPv6的本地回环地址::1,而非传统的IPv4地址127.0.0.1。
2. MongoDB默认监听配置限制
MongoDB默认的bindIp配置通常仅设置为127.0.0.1,意味着它只监听IPv4的本地回环端口,未开启IPv6监听。当Mongoose通过解析后的::1尝试连接时,由于MongoDB未在该IPv6端口上监听,就会返回连接拒绝错误。
而直接使用127.0.0.1时,强制指定了IPv4协议,正好匹配MongoDB的监听配置,因此连接成功。
验证方法
查看MongoDB监听端口:
Linux/macOS执行:netstat -an | grep 27017Windows执行:
netstat -ano | findstr 27017如果输出只有
127.0.0.1:27017,没有::1:27017,即可确认MongoDB未开启IPv6监听。检查MongoDB配置文件:
找到mongod.conf(或mongodb.conf)中的bindIp参数,默认值通常是127.0.0.1,若要支持IPv6连接,可修改为bindIp: 127.0.0.1,::1或启用bindIpAll: true(允许所有地址监听)。
内容的提问来源于stack exchange,提问作者Manzudhn
相关产品推荐
相关产品推荐

