Heim > Backend-Entwicklung > Golang > Wie kann ich eine Go-Anwendung in einem Docker-Container mit einer lokalen MongoDB-Instanz verbinden?

Wie kann ich eine Go-Anwendung in einem Docker-Container mit einer lokalen MongoDB-Instanz verbinden?

Linda Hamilton
Freigeben: 2024-11-16 19:07:03
Original
1017 Leute haben es durchsucht

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

Go-App mit lokaler Mongo-Verbindung dockerisieren

Bei der Arbeit an Golang-Projekten mit Docker stellt die Integration einer lokalen MongoDB-Datenbank eine Konnektivitätsherausforderung dar. Wenn ein Go-Projekt mit MongoDB außerhalb von Docker ausgeführt wird, ist die Datenbankverbindung erfolgreich. Wenn jedoch dasselbe Projekt in einem Docker-Container ausgeführt wird, schlägt die Verbindung fehl.

Verstehen des Problems

Docker erstellt eine virtuelle Umgebung für Containeranwendungen. Dies bedeutet, dass der Container in einem separaten Netzwerkraum ausgeführt wird, der vom Hostsystem getrennt ist. Folglich wird die Verbindung zu externen Ressourcen, wie etwa einer lokal laufenden MongoDB-Instanz, problematisch.

Lösung: Verwendung von host.docker.internal

Docker weist eine eindeutige IP-Adresse zu zu jedem Container und stellt einen speziellen Hostnamen bereit, „host.docker.internal“. Dieser Hostname fungiert als Gateway, um vom Container aus eine Verbindung zum Hostsystem herzustellen. Da MongoDB lokal auf dem Hostsystem ausgeführt wird, wird das Konnektivitätsproblem durch die Verwendung von „host.docker.internal“ als Hostname behoben.

Geänderte Docker-Datei

Um diese Lösung zu integrieren , ändern Sie die Docker-Datei wie folgt:

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
Nach dem Login kopieren

Verbindungszeichenfolge

Aktualisieren Sie in der Go-Anwendung die MongoDB-Verbindungszeichenfolge, um „host.docker.internal“ als zu verwenden der Hostname. Zum Beispiel:

connectionString := fmt.Sprintf("mongodb://host.docker.internal:21017/database")
client, err := mongo.Connect(ctx, options.Client().ApplyURI(connectionString))
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie kann ich eine Go-Anwendung in einem Docker-Container mit einer lokalen MongoDB-Instanz verbinden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage