Webagentur » Digitale Nachrichten » So verbinden Sie sich mit Localhost in einem Docker-Container

So verbinden Sie sich mit Localhost in einem Docker-Container

Wenn Sie mit Docker arbeiten, containerisieren Sie in der Regel die Dienste, aus denen Ihr Stack besteht, und verwenden containerübergreifende Netzwerke, um miteinander zu kommunizieren. Manchmal benötigen Sie möglicherweise einen Container, um mit einem Dienst auf Ihrem Host zu kommunizieren, der nicht containerisiert wurde. So greifen Sie zu localhost ou 127.0.0.1 aus einem Docker-Container.

Die einfache Möglichkeit

Unterstützung für Docker Desktop 18.03+ für Windows und Mac host.docker.internal als funktionaler Alias ​​für localhost. Verwenden Sie diese Zeichenfolge in Ihren Containern, um auf Ihren Hostcomputer zuzugreifen.

  • localhost et 127.0.0.1 - Diese werden gelöst bei Container.
  • host.docker.internal - Dies wird zum externen Host aufgelöst.

Wenn Sie einen MySQL-Server auf Ihrem Host ausführen, können Docker-Container darauf zugreifen, indem sie eine Verbindung zu . herstellen host.docker.internal:3306. Dies ist die einfachste Technik, wenn Sie auf einem Windows- oder Mac-Computer arbeiten.

Docker Engine-Benutzer unter Linux können aktivieren host.docker.internal auch über die --add-host Flagge für docker run. Starten Sie Ihre Container mit diesem Flag, um die Hostkette verfügbar zu machen:

docker run -d --add-host host.docker.internal: host-gateway my-container: aktuell

Die --add-host Flag fügt dem Container einen Eintrag hinzu /etc/hosts einordnen. Der oben gezeigte Wert der Karten host.docker.internal zum Container-Host-Gateway, das mit dem realen übereinstimmt localhost Wert. Du könntest ersetzen host.docker.internal mit Ihrem eigenen Kanal, wenn Sie es vorziehen.

Verbindung zum Host-Netzwerk

Docker bietet eine host Netzwerk, das es Containern ermöglicht, den Netzwerkstapel Ihres Hosts gemeinsam zu nutzen. Dieser Ansatz bedeutet localhost innerhalb eines Containers wird in den physischen Host aufgelöst, anstatt in den Container selbst.

Container werden mit dem Hostnetzwerk gestartet, indem die --network=host Flagge:

docker run -d --network = host my-container: aktuell

Ihr Container kann jetzt referenzieren localhost ou 127.0.0.1 direkt.

Wenn Sie Docker Compose verwenden, ändern Sie die Service-Definition Ihres Containers, um die network_mode Feld:

DIENSTLEISTUNGEN:
  mein-service:
    Netzwerkmodus: Gastgeber

Bei diesem Ansatz gibt es einige Vorbehalte. Es ist wichtig, alle Auswirkungen zu berücksichtigen, bevor Sie es verwenden. Container haben normalerweise ihr eigenes privates Netzwerk, das vom Host-Stack getrennt ist. Wenn Sie angeben --network=host, erbt der Container standardmäßig die freigegebenen Netzwerkeinstellungen von Ihrem Host.

Alle vom Container freigegebenen Ports werden freigegeben auf dem Wirt, auch wenn sie nicht explizit mit dem deklariert sind -p Flagge. Der Standard-Hostname des Containers stimmt mit dem des Hosts überein, kann jedoch mit dem geändert werden --hostname Flagge.

Das Hostnetzwerk kann ein Sicherheitsproblem sein, das das Docker-Container-Isolationsmodell durchbricht. Dies kann immer noch in Szenarien nützlich sein, in denen Sie sicher sind, dass die ausgeführten Container nicht miteinander in Konflikt geraten oder Probleme in Ihrer Hostumgebung verursachen. Der Host-Netzwerkmodus ist auch schneller als der Standard-Bridge-Modus, da es keine Virtualisierungsebene für den Datenverkehr gibt.

Zugriff auf den Host mit dem Standard-Bridge-Modus

Ihr Host ist standardmäßig immer von Containern aus zugänglich bridge Netzwerkmodus. Sie müssen es nur anhand seiner Docker-Netzwerk-IP referenzieren, anstatt localhost ou 127.0.0.1.

Die meisten Docker Engine-Installationen repräsentieren den Host als 172.17.0.1 standardmäßig docker0 Netzwerk von Brücken. Sie können Ihre eigene IP überprüfen, indem Sie diesen Befehl auf Ihrem Host ausführen:

IP-Adresse anzeigen docker0

Die Docker-IP Ihres Hosts wird auf dem . angezeigt inet Leitung. Stellen Sie von Ihren Containern aus eine Verbindung zu dieser IP-Adresse her, um erfolgreich auf die Dienste zuzugreifen, die auf Ihrem Host ausgeführt werden.

Eine der Fallstricke bei diesem Ansatz besteht darin, dass Sie möglicherweise keine Verbindung zu Diensten herstellen können, die direkt auf localhost. Sie müssen sicherstellen, dass Ihre Dienste auf Ihrer Docker-Bridge-IP auf Verbindungen warten, sowie localhost et 127.0.0.1. sonst wirst du sehen connection refused oder ähnliche Fehler in Ihrem Container.

Zusammenfassung

Sie haben mehrere Möglichkeiten, wenn Sie die Außenseite eines Docker-Containers zu Ihrem Computer erreichen müssen localhost. Wenn Sie Windows oder Mac verwenden, verwenden Sie am besten die host.docker.internal auch bekannt Linux-Benutzer können etwas Ähnliches mit dem --add-host Flag beim Starten eines Containers.

Der Hostnetzwerkmodus ist eine universelle Alternative, die es Containern ermöglicht, den Netzwerkstapel Ihres Hosts gemeinsam zu nutzen. Sie können verweisen localhost direkt, muss sich aber der Risiken und Grenzen bewusst sein. Dies ist keine geeignete Option, wenn eine starke Netzwerkisolierung erforderlich ist.

Das Festhalten am Bridge-Modus ist möglicherweise die beste Option für Workloads, die ihn unterstützen. Binden Sie die Dienste Ihres Hosts an seine Docker-IP und verwenden Sie dann diese Adresse, um eine Verbindung von Ihrem Container aus herzustellen. Auf diese Weise können Sie das containerbasierte virtualisierte Netzwerk von Docker verwenden und gleichzeitig bei Bedarf eine Route zu Ihrem Host bereitstellen.

★ ★ ★ ★ ★