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
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))
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!