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

Golang API连接MongoDB失败求助:遇连接超时与域名解析错误

Golang连接MongoDB时报错求助

初始报错信息

2022/12/06 19:09:25 server selection error: server selection timeout, current topology: { Type: ReplicaSetNoPrimary, Servers: [{ Addr: ac-tqorttq-shard-00-02.atpezds.mongodb.net:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp 52.28.222.2:27017: i/o timeout }, { Addr: ac-tqorttq-shard-00-00.atpezds.mongodb.net:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp 18.197.37.129:27017: i/o timeout }, { Addr: ac-tqorttq-shard-00-01.atpezds.mongodb.net:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp 18.195.134.220:27017: i/o timeout }, ] }

我的连接代码

func init() {
    clientOptions := options.Client().ApplyURI(configs.GetEnv("MONGOURI"))

    client, err := mongo.Connect(context.TODO(), clientOptions)

    checkErr(err)

    err = client.Ping(context.TODO(), nil)

    checkErr(err)

    fmt.Println("connected to database successfully")

    notesCollection = openCollection("notes_collection")

    userCollection = openCollection("user_collection")

}

移除连接字符串中"+srv"后的新报错

2022/12/06 19:16:46 server selection error: server selection timeout, current topology: { Type: Unknown, Servers: [{ Addr: cluster0.atpezds.mongodb.net:27017, Type: Unknown, Last error: connection() error occurred during connection handshake: dial tcp: lookup cluster0.atpezds.mongodb.net: No address associated with hostname }, ] }

可能的解决方向

  • 检查网络与防火墙:用telnet ac-tqorttq-shard-00-00.atpezds.mongodb.net 27017测试端口连通性,确认本地机器能访问MongoDB Atlas节点。公司/校园网络可能有防火墙限制,需开放对应端口或使用合规代理。
  • 恢复+srv连接字符串:MongoDB Atlas副本集的标准连接格式必须带+srv,它会自动解析所有副本节点,不要手动移除。同时检查连接字符串里的用户名、密码、集群名称是否完全正确,特殊字符(如@、:)要做URL转义。
  • 调整连接超时参数:在创建clientOptions时增加超时时间,避免因网络延迟导致超时:
    import "time"
    
    // ...
    clientOptions := options.Client().ApplyURI(configs.GetEnv("MONGOURI")).
        SetConnectTimeout(10 * time.Second).
        SetServerSelectionTimeout(15 * time.Second)
    
  • 检查Atlas IP白名单:登录MongoDB Atlas控制台,确认本地机器的公网IP已添加到集群的IP访问白名单中,否则Atlas会直接拒绝连接请求。
  • 验证DNS解析:执行nslookup ac-tqorttq-shard-00-00.atpezds.mongodb.net确认域名能正常解析到对应IP,若解析失败需更换DNS服务器(如用8.8.8.8)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:10:34