Dockerisation de l'application Go avec une connexion Mongo locale
Lorsque vous travaillez sur des projets Golang avec Docker, l'intégration d'une base de données MongoDB locale pose un défi de connectivité. Si un projet Go utilisant MongoDB est exécuté en dehors de Docker, la connexion à la base de données réussit. Cependant, lorsque le même projet est exécuté dans un conteneur Docker, la connexion échoue.
Comprendre le problème
Docker crée un environnement virtuel pour les applications conteneurisées. Cela signifie que le conteneur s'exécute dans un espace réseau distinct, distinct du système hôte. Par conséquent, la connexion à des ressources externes, telles qu'une instance MongoDB exécutée localement, devient problématique.
Solution : utiliser host.docker.internal
Docker attribue une adresse IP unique à chaque conteneur et fournit un nom d'hôte spécial, "host.docker.internal". Ce nom d'hôte agit comme une passerelle pour se connecter au système hôte depuis le conteneur. Étant donné que MongoDB s'exécute localement sur le système hôte, l'utilisation de "host.docker.internal" comme nom d'hôte résout le problème de connectivité.
Fichier Docker modifié
Pour incorporer cette solution , modifiez le Dockerfile comme suit :
FROM golang WORKDIR $GOPATH/src/myapp ADD . /go/src/myapp RUN go get ./... RUN go install myapp ENV MONGO_HOST=host.docker.internal CMD /go/bin/myapp --mongodbhost=$MONGO_HOST EXPOSE 8080 EXPOSE 27017
Connexion String
Dans l'application Go, mettez à jour la chaîne de connexion MongoDB pour utiliser "host.docker.internal" comme nom d'hôte. Par exemple :
connectionString := fmt.Sprintf("mongodb://host.docker.internal:21017/database") client, err := mongo.Connect(ctx, options.Client().ApplyURI(connectionString))
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!