GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

So erhalten Sie die IP-Adresse eines Docker-Containers vom Host

Bei Docker-Containern geht es nicht nur um Isolation – sie werden oft verwendet, um Prozesse zu verwalten, die dennoch direkt miteinander kommunizieren müssen. Aber um zu kommunizieren, müssen Sie oft die IP-Adresse jedes Containers kennen, die Sie mit ein paar Befehlen finden können.

Erwägen Sie die Verwendung einer benutzerdefinierten Bridge

Docker-Netzwerke sind etwas kompliziert. Standardmäßig gestartete Container werden im standardmäßigen „Brückennetzwerk“ platziert und dürfen direkt mit anderen Containern kommunizieren, vorausgesetzt, Sie haben ihre private IP-Adresse. Dies kann für eine echte Isolation deaktiviert werden, ist es aber nicht standardmäßig.

Sie können diese Adresse auch verwenden, um vom Host-Betriebssystem zu kommunizieren, wenn Sie keinen Port binden möchten. Dies ist der primäre Anwendungsfall für den direkten Zugriff auf einen Container über seine IP-Adresse, aber Sie sollten wahrscheinlich trotzdem nur einen Port binden (Sie können ihn in Ihrer Firewall für das Internet geschlossen halten).

IP-Adressen sind jedoch kurzlebig und können leicht beschädigt werden, wenn Container gestoppt und gestartet werden. Für die Kommunikation zwischen Containern bietet Docker eine Lösung über benutzerdefinierte Bridge-Netzwerke, die Sie wahrscheinlich verwenden sollten, wenn Sie mehrere Container haben, die miteinander kommunizieren.

Container, die zu nicht standardmäßigen Netzwerken hinzugefügt werden, können über ihren Alias ​​aufeinander zugreifen, der automatisch in die private IP aufgelöst wird. Sie können neue Netzwerke erstellen, Container in diesen Netzwerken ausführen und vorhandene Container mit dem Netzwerk verbinden. Sie können dann auf die anderen Container zugreifen, indem Sie den Alias ​​als Hostnamen verwenden; Beispielsweise kann der NGINX-Container hier mit der Verbindungszeichenfolge mongodb://mongohost:27017 auf die MongoDB-Instanz zugreifen .

docker network create example
docker run --net example --name nginx -d nginx
docker network connect example --alias mongohost mongodb

Die Verwendung von Bridges hat viele Vorteile und wird gegenüber dem alten --link empfohlen Option, die im Standardnetzwerk funktioniert. Das Hauptproblem besteht darin, dass Container in benutzerdefinierten Netzwerken den Ports des anderen ausgesetzt werden, unabhängig davon, ob sie veröffentlicht sind, aber Sie können mehrere Netzwerke einrichten, sodass dies normalerweise kein Problem darstellt.

Der andere Nachteil ist, dass benutzerdefinierte Netzwerke, da sie eine bessere Isolierung bieten, Ihnen auch den Zugriff auf Container über Netzwerke hinweg mit ihrer privaten IP-Adresse verbieten. Alle Container im Standardnetzwerk können miteinander kommunizieren, aber sobald sie entfernt und in einem benutzerdefinierten Netzwerk platziert werden, ist diese Fähigkeit deaktiviert. Sie können den Container jedoch auch einfach sowohl in den Standard- als auch in den benutzerdefinierten Netzwerken starten, sodass es kein Problem darstellt, wenn Sie den Container für andere sichtbar machen möchten.

Beziehen der IP-Adresse von Docker

Wenn Sie jedoch nur die IP-Adresse möchten, ist es ziemlich einfach, sie vom Host-Betriebssystem zu erhalten. Zuerst müssen Sie die ID oder den Namen des Containers finden, für den Sie die Informationen erhalten möchten, was Sie tun können mit:

docker ps

Führen Sie dann docker inspect aus , die eine riesige JSON-Datei mit allen Informationen über den Container zurückgibt. Wir sind jedoch nur an der IP-Adresse interessiert, sodass Sie ihr eine Formatierungsoption mit -f übergeben können um es auf die Adresse einzugrenzen.

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' name_or_id

Dieser Befehl funktioniert gut, gibt aber auch nur Informationen für einen Container zurück, dessen ID Sie benötigen. Wenn Sie eine konkretere Lösung wünschen, können Sie docker network inspect verwenden die Informationen über alle Container im angegebenen Netzwerk ausgibt, optional als JSON-Lookup-Tabelle formatiert:

docker network inspect bridge -f '{{json .Containers}}'

Netzwerkkonfiguration aus dem Container abrufen

Docker-Container sind wirklich nur ein Isolationsmechanismus, und nichts hindert Sie daran, einfach den Container zu betreten und reguläre Linux-Befehle wie ifconfig auszuführen und erhält so die IP-Adresse.

Dazu müssen Sie den Containernamen oder die ID mit docker ps abrufen , und führen Sie dann exec -it aus , in diesem Fall alle IP-Informationen ausdrucken:

docker exec -it b94ef3169cd4 ip a


Docker
  1. Wie man ein Host-Verzeichnis in einen Docker-Container einbindet

  2. So trennen Sie sich von einem Docker-Container, ohne ihn zu stoppen

  3. So teilen Sie Daten zwischen Docker-Containern

  4. So listen Sie Docker-Container auf

  5. So erhalten Sie Informationen zu einem Container in Docker

So führen Sie SSH in Docker-Container ein [Schritt für Schritt]

So führen Sie Docker-Container aus

So erhalten Sie die IP-Adresse des Docker-Containers

Arbeiten mit Docker-Containern über die Befehlszeile

So benennen oder umbenennen Sie Docker-Container

So verwalten Sie Docker-Container