I have this Go Code to connect to my Mongo Cloud Database:
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")
}
I already ran this code on a Windows machine, and it worked. Now I tried to run it on ubuntu, and I get following error:
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
I don't know, why it worked on windows, and now it doesn't on ubuntu.
Thanks for your help!
cannot unmarshal DNS message
This is not quite related to MongoDB Go driver.
There is a patch in Go version 1.11.x #10622 net: target domain names in SRV records should not be compressed that tighten the way SRV records are read to follow RFC-2782.
If an authoritative DNS server (non-compliantly) sends an SRV records using domain name compression, the net.lookupSRV()
will throw an error with cannot unmarshal DNS message
(net/lookup_unix.go#L130). For example, the embedded Docker DNS maybe doing the server name compression.
The workarounds for Go v1.11 are:
/etc/resolv.conf
by replacing the nameserver
to use a compliant and/or public DNS server i.e. 1.1.1.1
or 8.8.8.8
See also GODRIVER-829