J'ai ce code Go pour me connecter à ma base de données Mongo Cloud:
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
J'ai déjà exécuté ce code sur une machine Windows, et cela a fonctionné. Maintenant, j'ai essayé de l'exécuter sur ubuntu, et j'obtiens l'erreur suivante:
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") }
Je ne sais pas, pourquoi cela a fonctionné sous Windows, et maintenant ce n'est pas le cas sur ubuntu .
Merci pour votre aide!
3 Réponses :
impossible d'annuler le message DNS
Ce n'est pas tout à fait lié au pilote MongoDB Go.
Il existe un correctif dans Go version 1.11.x # 10622 net: noms de domaine cible dans les enregistrements SRV ne doit pas être compressé qui resserre la façon dont les enregistrements SRV sont lus pour suivre la RFC-2782.
Si un serveur DNS faisant autorité (non conforme) envoie des enregistrements SRV en utilisant la compression de nom de domaine, le net.lookupSRV ()
générera une erreur avec ne peut pas démarsaliser le message DNS code > ( net / lookup_unix.go # L130 ). Par exemple, le DNS Docker intégré effectue peut-être la compression du nom du serveur.
Les solutions de contournement pour Go v1.11 sont:
/etc/resolv.conf
en remplaçant le nameserver
pour utiliser un serveur DNS conforme et / ou public, c'est-à-dire 1.1.1.1 code> ou 8.8.8.8
Voir aussi GODRIVER-829
en fait, la mise à jour de resolv.conf a bien fonctionné. Je vous remercie
@OWADVL: attention à ce que les modifications apportées à resolv.conf ne persistent pas aux redémarrages , et c'est non trivial pour résoudre ce problème .
La solution consiste à utiliser une chaîne de connexion non SRV. Accédez à Mongo Atlas pour obtenir votre chaîne de connexion comme d'habitude.
Sélectionnez le pilote Java, version 3.4 ou ultérieure
Vous devriez maintenant voir votre chaîne de connexion. Fonctionne avec go1.13.8.
Merci, cela a fonctionné pour moi et persiste à travers les redémarrages.
Une autre option, trouvée ici
suggère d'installer resolvconf (pour Ubuntu Vous devriez voir sur la première ligne votre serveur DNS comme ici: apt install resolvconf
), ajoutez la ligne nameserver 8.8.8.8
à /etc/resolvconf/resolv.conf.d/base code>, puis exécutez
sudo resolvconf -u
et pour être sûr que service resolvconf redémarre
.
Pour vérifier, exécutez systemd-resolution --status
. DNS Servers: 8.8.8.8
DNS Domain: sa-east-1.compute.internal
DNSSEC NTA: 10.in-addr.arpa
16.172.in-addr.arpa
Questions: 1) Utilisez-vous Golang version 1.11? 2) Utilisez-vous Docker pour Ubuntu? Ou Windows et Ubuntu sont des machines complètement différentes?