Wenn auf einem Hostcomputer eine MySQL-Datenbank ausgeführt wird und auf diesem Host auch ein Docker-Container ausgeführt wird: Wie würde ich über den Docker-Container, der auf dem Host ausgeführt wird, auf die MySQL-Datenbank zugreifen?
Gibt es zum Beispiel eine Möglichkeit, einen Host-Port im Container zu veröffentlichen (umgekehrt zu dem, was Docker-Run -p macht)?
Antworten:
Es gibt mehrere langjährige Diskussionen darüber, wie dies auf konsistente, gut verstandene und tragbare Weise geschehen kann. Keine vollständige Lösung, aber ich werde Sie mit den folgenden Diskussionen verknüpfen.
In jedem Fall möchten Sie viele versuchen, die Option --add-host zum Andocken auszuführen, um die IP-Adresse des Hosts in die Datei / etc / host des Containers einzufügen. Von dort aus ist es trivial, über einen beliebigen Port eine Verbindung zum Host herzustellen:
Dokumentation:
https://docs.docker.com/engine/reference/commandline/run/
Diskussionen zum Zugriff auf den Host vom Container aus:
https://github.com/docker/docker/issues/1143
https://github.com/docker/docker/issues/10023
quelle
Aus den 18.03 Dokumenten:
BEISPIEL: Folgendes verwende ich für meine MySQL-Verbindungszeichenfolge in meinem Container, um auf die MySQL-Instanz auf meinem Host zuzugreifen:
quelle
Ab Docker 17.06 ist in Docker-Containern ein spezieller DNS-Name nur für Mac verfügbar, der in die IP-Adresse des Hosts aufgelöst wird. Es ist:
docker.for.mac.localhost
Die Dokumentation finden Sie hier: https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support
quelle
docker.for.mac.host.internal
von nunDocker 17.12.0 ce
an. docs.docker.com/docker-for-mac/release-notes/…docker.for.mac.localhost
arbeitet am18.03.1-ce-mac65
Verwenden Sie host.docker.internal ab Docker 18.03 .
quelle
Docker version 18.03.0-ce, build 0520e24
18.03.1-ce-mac65
Andere Antworten haben bei mir nicht gut funktioniert. Mein Container konnte die Host-IP nicht mit host.docker.internal auflösen . Es gibt zwei Möglichkeiten
Host-Netzwerk gemeinsam nutzen --net = Host:
Verwenden der Docker-IP-Adresse, die normalerweise 172.17.0.1 lautet . Sie können dies überprüfen, indem Sie den Befehl ifconfig aufrufen und inet addr der Docker-Schnittstelle abrufen
Sobald Sie diese IP-Adresse haben, können Sie sie als Argument an Docker Run und dann an Application übergeben oder wie ich den Speicherort von jdbc.properties über Volume dem Verzeichnis auf dem Hostcomputer zuordnen, damit Sie die Datei extern verwalten können .
HINWEIS: Ihre Datenbank lässt möglicherweise keine externen Verbindungen zu. Im Falle von postgresql müssen Sie 2 Dateien bearbeiten, wie hier und hier beschrieben :
Bearbeiten Sie die Datei postgresql.conf, um alle Adressen abzuhören. Standardmäßig zeigt es auf localhost.
Bearbeiten Sie die Datei pg_hba.conf, um Verbindungen von allen Adressen zuzulassen. In der letzten Zeile hinzufügen:
WICHTIG: Der letzte Schritt zum Aktualisieren des Datenbankzugriffs wird für die Verwendung in der Produktion nicht empfohlen, es sei denn, Sie sind sich wirklich sicher, was Sie tun.
quelle