Das Standardnetzwerk des Docker-Containers ist in Form einer Bridge (im selben LAN wie der Host, aber mit einer separaten LAN-IP); wenn das Programm in der Produktionsumgebung läuft, muss man nur die entsprechende Serviceadresse konfigurieren, um sich mit der Datenbank, Redis usw. zu verbinden.
In einer Entwicklungsumgebung, wenn der Service in Docker läuft und die Datenbank lokal läuft, ist die Konfiguration von 127.0.0.1 nicht einfach zu bedienen.
Dies kann auf zwei Arten gelöst werden.
Lösung 1:
Behandle die Host-Maschine und den Container als zwei separate Maschinen und konfiguriere bei der Konfiguration der Adresse die LAN-IP oder öffentliche IP des Host-Hosts.
Lösung 2:
Schreiben Sie die Host-Adresse jedoch direkt als: host.docker.internalDie zweite Methode erfordert eine Docker-Version größer als 18.03 und muss unter Windows und Mac verfügbar sein。
Um zu testen, ob diese beiden Methoden auf den Host zugreifen können, können Sie direkt ein Image mit docker ausführen, um die Kommandozeile zu pingen:
Wie Sie auf dem obigen Bild sehen können, ist Container-Zugriffhost.docker.internalDu kannst auf den Dienst des Hosts zugreifen, indem du die Datei /etc/hosts überprüfst, wirst du feststellen, dass es keine Domain-Umleitung gibt und du kennst das spezifische Grundprinzip von Docker nicht.
Sowohl der Host als auch der Container können über host.docker.internal auf die Dienste des Hosts zugreifen, aber die vom Ping-Befehl zurückgegebene Adresse ist unterschiedlich, wie folgt:
|