无法连接到Ubuntu上Golang中的Mongo Cloud mongodb数据库

eqqqjvef  于 2023-05-06  发布在  Go
关注(0)|答案(3)|浏览(161)

我有这个Go代码来连接我的Mongo Cloud数据库:

func connectToDataBase() {
    ctx, cancel := context.WithTimeout(context.Background(), 20*time.Second)
    defer cancel()
    client, err := mongo.Connect(ctx, options.Client().ApplyURI(dbURL))
    if err != nil {
        log.Fatal("Error connecting to Database: ", err.Error())
    }
    DB = client.Database("storyfactory")
}

我已经在Windows机器上运行了这段代码,它工作了。现在我试着在ubuntu上运行它,我得到以下错误:

2019/04/13 00:20:37 Error connecting to Database: error parsing uri (mongodb+srv://User:Password@cluster0-gpxjk.gcp.mongodb.net/test?retryWrites=true): lookup cluster0-gpxjk.gcp.mongodb.net on 127.0.0.53:53: cannot unmarshal DNS message
exit status 1

我不知道,为什么它在windows上能用,而现在在ubuntu上不行。
谢谢你的帮助!

oo7oh9g9

oo7oh9g91#

无法解组DNS消息
这与MongoDB Go驱动程序无关。
Go版本1.11.x #10622 net: target domain names in SRV records should not be compressed中有一个补丁,它收紧了读取SRV记录的方式,以遵循RFC-2782。
如果一个权威的DNS服务器(不兼容)使用域名压缩发送SRV记录,net.lookupSRV()将抛出一个错误cannot unmarshal DNS message(net/lookup_unix.go#L130)。例如,嵌入式Docker DNS可能会进行服务器名称压缩。
Go v1.11的解决方法是:

  • 使用非SRV MongoDB URI
  • 通过替换nameserver更新/etc/resolv.conf的内容,以使用兼容和/或公共DNS服务器,即1.1.1.18.8.8.8

参见GODRIVER-829

xt0899hw

xt0899hw2#

解决方法是使用非SRV连接字符串。去Mongo Atlas获取你的连接字符串。
驱动程序选择Java 3.4或更高版本
现在应该可以看到连接字符串了。与go1.13.8一起使用。

rfbsl7qr

rfbsl7qr3#

另一个选项,发现here建议安装resolvconf(对于Ubuntu apt install resolvconf),将行nameserver 8.8.8.8添加到/etc/resolvconf/resolv.conf.d/base,然后运行sudo resolvconf -u并确保service resolvconf restart。要验证,请运行systemd-resolve --status
您应该在第一行看到您的DNS服务器,如下所示:

DNS Servers: 8.8.8.8
          DNS Domain: sa-east-1.compute.internal
          DNSSEC NTA: 10.in-addr.arpa
                      16.172.in-addr.arpa

相关问题