Gibt es einen Befehl, den ich ausführen kann, um die IP-Adresse des Containers direkt vom Host abzurufen, nachdem ein neuer Container erstellt wurde?
Grundsätzlich möchte ich nach dem Erstellen des Containers durch Docker meine eigenen Skripts für die Codebereitstellung und Containerkonfiguration erstellen.
Antworten:
Die
--format
Optioninspect
kommt zur Rettung.Die moderne Docker-Client-Syntax lautet:
Die alte Docker-Client-Syntax lautet:
Diese Befehle geben die IP-Adresse des Docker-Containers zurück.
Wie in den Kommentaren erwähnt: Wenn Sie unter Windows arbeiten, verwenden Sie doppelte Anführungszeichen
"
anstelle von einfachen Anführungszeichen'
um die geschweiften Klammern.quelle
<no value>
Antwort auf einem Mac mit Fig / Boot2Docker<no value>
wenn Sie versuchen, dies für einen Container auszuführen, der nicht ausgeführt wird. Stellen Sie sicher, dass Ihr Container ausgeführt wird, bevor Sie dies tun.{{ .NetworkSettings.Networks.$network.IPAddress }}
. Der Standardwert scheint Bridge zu sein, aber unter Docker-Compose ist dies ein bestimmter Name, der vom Namen Ihrer App abhängt (ich denke vom Flag --project-name), obwohl dies auch von der Art der Netzwerkkonfiguration abhängt Sie haben eingerichtet). Ich schrieb eine vollständige Antwort in einer Antwort hier stackoverflow.com/questions/17157721/…Sie können verwenden
docker inspect <container id>
.Zum Beispiel:
quelle
docker inspect $CID | grep IPAddress | cut -d '"' -f 4
, es funktioniert gut :)alias dockerip='docker ps | tail -n +2 | while read cid b; do echo -n "$cid\t"; docker inspect $cid | grep IPAddress | cut -d \" -f 4; done'
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
ist die neue Syntax.-format
veraltet ist, wird es--format
.Holen Sie sich zuerst die Container-ID:
(Die erste Spalte enthält die Container-ID.)
Verwenden Sie die Container-ID, um Folgendes auszuführen:
Unten unter "NetworkSettings" finden Sie "IPAddress".
Oder machen Sie einfach:
quelle
docker run -it MYCONTAINER /bin/bash
) hat die Ausgabe voninspect
keinen AbschnittNetworkSettings
!docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
... | grep IP
Lösung allen Formatierungsdetails, die erforderlich sind, um IP zu erhalten. +1docker run -it MYIMAGE
(das ist kein Containername ). Indocker inspect MYIMAGE
diesem Fall erhalten Sie statische Informationen zum Bild . Sie müssen den Namen des laufenden Containers finden (oder seine ID verwenden, wie andere vorschlagen). Auf meinem System ist der erste solche Container, der aus diesem Image erstellt wurde, standardmäßig nameMYIMAGE_1
, ebensodocker inspect MYIMAGE_1
wie NetworkSettings.Sie können
-i
grep hinzufügen , um den Fall zu ignorieren, dann funktioniert sogar Folgendes:quelle
Um alle Containernamen und ihre IP-Adressen in nur einem Befehl abzurufen.
Wenn Sie
docker-compose
den Befehl verwenden, lautet dieser:Die Ausgabe wird sein:
quelle
{{.NetworkSettings.IPAddress }}
zu{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'
. Dassed(1)
entfernt leere Zeilen für Container, die vorhanden sind, aber keine IP-Adresse haben.Fügen Sie dieses Shell-Skript in Ihre
~/.bashrc
oder eine relevante Datei ein:Um eine IP-Adresse eines Containers zu erhalten, gehen Sie einfach wie folgt vor:
Verwenden Sie für die neue Version des Docker Folgendes:
quelle
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
source ~/.bash_profile
Alle IP-Adressen des Containers anzeigen:
quelle
In Docker 1.3+ können Sie dies auch überprüfen mit:
Geben Sie den laufenden Docker (Linux) ein:
Für Windows:
quelle
docker exec [container-name-or-id] ip a
docker exec [container-id or container-name] ipconfig
Erstellen Sie ab Docker Version 1.10.3 20f81dd
Sofern Sie Docker nichts anderes mitgeteilt haben, startet Docker Ihre Container immer im Brückennetzwerk. So können Sie diesen Befehl unten versuchen:
Daraufhin sollte ein Container-Abschnitt zurückgegeben werden, in dem die IP-Adresse für diesen laufenden Container angezeigt wird.
quelle
Ausführen:
Dadurch werden aktive Docker-Bilder angezeigt:
Verwenden Sie den CONTAINER ID-Wert:
172.17.0.2
quelle
Basierend auf einigen der Antworten, die ich geliebt habe, habe ich beschlossen, sie zu einer Funktion zusammenzuführen, um alle IP-Adressen und eine andere für einen bestimmten Container abzurufen. Sie sind jetzt in meiner
.bashrc
Akte.Der erste Befehl gibt die IP-Adresse aller Container und der zweite die IP-Adresse eines bestimmten Containers an.
quelle
Referenzcontainer nach Namen:
Dann holen Sie sich die IP-Adresse nach Namen:
quelle
Ich habe das folgende Bash-Skript geschrieben, um eine Tabelle mit IP-Adressen von allen Containern abzurufen, unter denen ausgeführt wird
docker-compose
.Sie sollten das variable Netzwerk in Ihren eigenen Netzwerknamen ändern.
quelle
Hier ist eine schnelle Antwort:
Holen Sie sich Ihren Containernamen oder Ihre ID:
Dann holen Sie sich die IP:
Holen Sie sich den Hafen:
quelle
Docker ist in Go geschrieben und verwendet die Go-Syntax auch für Abfragezwecke.
Um die IP-Adresse eines bestimmten Containers zu überprüfen, müssen Sie den folgenden Befehl ausführen (
-f
für "Format"):Für die Container-ID oder den Namen können Sie den Befehl ausführen
Dadurch wird jeder laufende Container aufgelistet.
quelle
Hier ist eine Lösung, die ich heute in Python entwickelt habe und die die
docker inspect container
JSON-Ausgabe als Datenquelle verwendet.Ich habe viele Container und Infrastrukturen, die ich überprüfen muss, und ich muss grundlegende Netzwerkinformationen von jedem Container schnell und hübsch abrufen abrufen. Deshalb habe ich dieses Skript erstellt.
WICHTIG: Seit Version 1.9 können Sie mit Docker mehrere Netzwerke erstellen und an die Container anhängen.
Die Ausgabe ist:
quelle
Das Obige funktioniert, wenn der Container im Standardbrückennetzwerk bereitgestellt wird.
Wenn Sie jedoch ein benutzerdefiniertes Brückennetzwerk oder ein Overlay-Netzwerk verwenden, funktioniert das Folgende besser:
quelle
Um die Antwort von ko-dos zu erweitern, ist hier ein Alias, um alle Containernamen und ihre IP-Adressen aufzulisten:
quelle
docker ps -q
, um das zu vermeidentail
und--format
um das grep zu vermeiden. Sie können auch mehrere Container-IDs an diedocker inspect
Shell übergeben , anstatt sie zu schleifen.docker ps -q
Zeigt nur die numerischen IDs der Container an, aber ich denke, es ist besser, ihren Namen zu verwenden.tail
dient nur dazu, die erste Zeile (Tabellenüberschrift) loszuwerden & wird noch benötigt. Ich könnte aber gebrauchen--format
:docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect --format="{{.NetworkSettings.IPAddress}}" $name | cut -d \" -f 4; done
. Aber das scheint keine große Verbesserung zu sein ... diegrep
IMO war besser lesbar.docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Ich benutze diesen einfachen Weg
z.B
quelle
Wenn Sie Docker mithilfe der Docker Toolbox installiert haben, können Sie die Kitematic-Anwendung verwenden, um die Container-IP-Adresse abzurufen:
quelle
docker inspect
dies nicht funktioniert, wenn Sie die Docker-Toolbox ausführen. Es wird eine IP-Adresse gemeldet, aber es ist nicht die richtige Adresse, die Ihre Dienste verwenden.So erhalten Sie die IP-Adresse und den Host-Port eines Containers:
Ausgabe:
quelle
HINWEIS!!! für die Verwendung von Docker Compose:
Da Docker Compose für jeden Cluster ein isoliertes Netzwerk erstellt, funktionieren die folgenden Methoden nicht
docker-compose
.Der eleganteste und einfachste Weg ist die Definition einer Shell-Funktion, derzeit die am häufigsten gewählte Antwort bei WouterD :
Docker kann Container-IDs in eine Datei wie Linux-Programme schreiben:
Laufen mit
--cidfile=filename
, Deponien Docker die ID des Containers „Dateiname“.Weitere Informationen finden Sie im Abschnitt " Docker führt PID-äquivalente Abschnitte aus ".
Verwenden einer PID-Datei:
Wenn der Container mit einem
--cidfile
Parameter ausgeführt wird, sieht derapp.cid
Dateiinhalt folgendermaßen aus:Sie können Dateiinhalte verwenden, um Docker-Container zu überprüfen:
Sie können die Container-IP mithilfe eines Inline-Python-Skripts extrahieren:
Hier ist eine menschlichere Form:
Weitere Informationen finden Sie unter " 10 Alternativen zum Abrufen der Docker-Container-IP-Adressen ".
quelle
Für Windows 10:
quelle
Dadurch werden alle Container-IPs auf dem Host aufgelistet:
quelle
Docker inspect verwendet, um alle Container-IPs und ihre jeweiligen Namen zu drucken
quelle
Nur der Vollständigkeit halber:
Ich mag die
--format
Option wirklich , aber zuerst war ich mir dessen nicht bewusst, also habe ich einen einfachen Python-Einzeiler verwendet, um das gleiche Ergebnis zu erzielen:quelle
Kombinieren früherer Antworten mit dem Finden der Container-ID basierend auf dem Docker-Image-Namen:
quelle
Verwenden:
quelle
$ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
172.17.0.2
Für Windows-Container verwenden
Wo
<container>
ist der Name oder die ID des ContainersSie können verwenden
docker ps
, um die ID des Containers zu finden.quelle
Wenn Sie die Container-ID vergessen haben oder nicht mit Shell-Befehlen bearbeiten möchten, ist es besser, eine Benutzeroberfläche wie Portainer zu verwenden.
https://portainer.io/
Dort finden Sie alle Informationen zum Container auch IP.
quelle