使用mgo.Dial创建Session时报错“no reachable servers”求解决方案
解决mgo.Session创建时的“no reachable servers”错误
你的代码如下:
func getSession() *mgo.Session { s, err := mgo.Dial("mongodb://127.0.0.1:27017") if err != nil { fmt.Println(err) } return s }
错误原因分析
- MongoDB服务未启动:本地27017端口没有MongoDB进程监听,无法建立连接。
- 端口被拦截:防火墙规则阻止了对27017端口的访问。
- MongoDB绑定配置异常:MongoDB配置为仅监听特定IP(未包含127.0.0.1),导致本地无法连接。
- 版本不兼容:使用的mgo库版本与MongoDB服务器版本不匹配,握手失败。
- 缺失认证信息:若MongoDB开启了用户名密码认证,连接字符串未携带认证信息会导致连接失败。
解决方案
1. 检查并启动MongoDB服务
- Windows:打开服务管理器,找到MongoDB服务并启动;或执行命令
net start MongoDB。 - Linux/macOS:执行
systemctl status mongod(systemd系统)查看状态,未启动则用systemctl start mongod启动;Homebrew安装的可执行brew services start mongodb-community。
2. 验证端口连通性
执行telnet 127.0.0.1 27017或nc -zv 127.0.0.1 27017测试端口是否可访问,不通则调整防火墙规则开放27017端口。
3. 调整MongoDB绑定配置
打开MongoDB配置文件(如mongod.conf),修改net.bindIp为127.0.0.1或0.0.0.0(允许所有IP访问),修改后重启MongoDB服务。
4. 确认版本兼容性
使用gopkg.in/mgo.v2分支的mgo库(官方维护版本),确保其支持当前MongoDB服务器版本,版本不兼容时升级mgo库。
5. 添加认证信息(若开启认证)
连接字符串格式改为mongodb://username:password@127.0.0.1:27017/dbname,替换对应的用户名、密码和数据库名称。
6. 优化错误处理
避免返回nil Session引发后续问题,修改代码如下:
func getSession() (*mgo.Session, error) { s, err := mgo.Dial("mongodb://127.0.0.1:27017") if err != nil { return nil, err } return s, nil }
内容的提问来源于stack exchange,提问作者Arya Rajput
相关产品推荐
相关产品推荐

