Maison > développement back-end > Golang > Comment puis-je connecter une application Go dans un conteneur Docker à une instance MongoDB locale ?

Comment puis-je connecter une application Go dans un conteneur Docker à une instance MongoDB locale ?

Linda Hamilton
Libérer: 2024-11-16 19:07:03
original
1015 Les gens l'ont consulté

How can I connect a Go application in a Docker container to a local MongoDB instance?

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
Copier après la connexion

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))
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal