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

时间:2019-04-12 22:23:04

标签: mongodb ubuntu go connect

我有此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上。
感谢您的帮助!

3 个答案:

答案 0 :(得分:6)

解决方法是使用非SRV连接字符串。按正常方式转到Mongo Atlas获取连接字符串。

驱动程序选择Java版本3.4或更高版本

您现在应该看到连接字符串。适用于go1.13.8。

答案 1 :(得分:1)

找到另一种选择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

答案 2 :(得分:0)

  

无法解组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 messagenet/lookup_unix.go#L130)引发错误。例如,嵌入式Docker DNS可能会进行服务器名称压缩。

Go v1.11的解决方法是:

  • 使用非SRV MongoDB URI
  • 通过替换/etc/resolv.conf以使用兼容和/或公共DNS服务器(即nameserver1.1.1.1)来更新8.8.8.8的内容

另请参阅GODRIVER-829