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

1409

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.

Murali Allada
quelle
28
Ich wollte nur sicherstellen, dass andere Noobs meinen Fehler nicht machen und versuchen, die IP aus dem Image anstelle des Containers zu erhalten. Stellen Sie sicher, dass Sie die CID oder Container-ID erhalten, und fragen Sie diese ab. CID über 'Docker ps' also.
Paul Gregoire
Wie komme ich umgekehrt? Host-IP oder Anruf vom Container?
Somnath Muluk

Antworten:

2328

Die --formatOption inspectkommt zur Rettung.

Die moderne Docker-Client-Syntax lautet:

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

Die alte Docker-Client-Syntax lautet:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

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.

WouterD
quelle
34
Dies ist eine viel, viel bessere Lösung. Fragen Sie nach Möglichkeit nur, was Sie brauchen!
MikeyB
8
Hmm. Erhalten einer <no value>Antwort auf einem Mac mit Fig / Boot2Docker
cevaris
2
@cevaris Sie erhalten, <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.
TheJediCowboy
55
!WARNUNG! Das funktioniert nicht mehr. Das neue Format ist für den Container spezifisch und folgt dem Formular {{ .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/…
Dunk
5
Vielleicht bin ich ein schläfriges Schaf, aber die Warnung vor doppelten Anführungszeichen war nicht kühn und blinkend genug, um meine Aufmerksamkeit zu erregen. Geben Sie möglicherweise zwei Beispiele an, die eindeutig als Linux und Windows gekennzeichnet sind. Ich habe buchstäblich nur das Beispiel eingegeben, die Dokumente überprüft, in denen auch einfache Anführungszeichen verwendet werden, und dann den Fehler gegoogelt. Ich bin sicher, ich bin nicht allein.
Wyck
513

Sie können verwenden docker inspect <container id>.

Zum Beispiel:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
knarren
quelle
67
Um die IP zu extrahieren, können Sie etwas tun docker inspect $CID | grep IPAddress | cut -d '"' -f 4, es funktioniert gut :)
Creack
9
Zusammengenommen sollte dieser Shell-Alias ​​alle Container-IDs und ihre IPs auflisten: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'
ko-dos
64
Wie von @ user3119830 erwähnt, gibt es eine neue Option zum Überprüfen. Jetzt können Sie die Ip einfacher machen mitdocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
Creack
16
Nur eine Notiz. Die einzelnen Strichoptionen werden nicht mehr unterstützt, sodass -format zu --format wird.
jamtur01
7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}ist die neue Syntax. -formatveraltet ist, wird es --format.
Devy
408

Holen Sie sich zuerst die Container-ID:

docker ps

(Die erste Spalte enthält die Container-ID.)

Verwenden Sie die Container-ID, um Folgendes auszuführen:

docker inspect <container ID>

Unten unter "NetworkSettings" finden Sie "IPAddress".

Oder machen Sie einfach:

docker inspect <container id> | grep "IPAddress"
Krunal
quelle
5
Schade, in einer meiner Instanzen (angefangen mit docker run -it MYCONTAINER /bin/bash) hat die Ausgabe von inspectkeinen Abschnitt NetworkSettings!
Eric
3
Dies funktioniert unter Windows 10 nicht. Sie müssen auch die IP-Adresse von DockerNAT mit ipconfig herausfinden.
ntiedt
@ Eric Sie können auch Netzwerkbrücke für das überprüfen:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński
5
Ich bevorzuge die ... | grep IPLösung allen Formatierungsdetails, die erforderlich sind, um IP zu erhalten. +1
d8aninja
1
@Eric - Sie haben Container mit Bild verwechselt . Der Befehl lautet tatsächlich docker run -it MYIMAGE(das ist kein Containername ). In docker inspect MYIMAGEdiesem 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 name MYIMAGE_1, ebenso docker inspect MYIMAGE_1wie NetworkSettings.
ToolmakerSteve
216
docker inspect CONTAINER_ID | grep "IPAddress"

Sie können -igrep hinzufügen , um den Fall zu ignorieren, dann funktioniert sogar Folgendes:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
nPcomp
quelle
5
Wie ist diese Antwort besser / anders als die anderen 22?
SDS
Dies ist definitiv nicht die beste Antwort. Die Antwort von WouterD ist die Antwort, nach der Sie suchen.
M. Vanderlee
7
@ M.Vanderlee Diese Antwort hat einen Befehl, der leichter zu merken ist, was sie zu einer besseren Antwort macht, IMO.
Huysentruitw
1
@WouterHuysentruit Sicher, aber Sie erhalten mehrere Einträge und den tatsächlichen "IPAddress" -Text. Sie können es nicht ohne weitere Manipulation in einem Skript verwenden.
M. Vanderlee
Du hast recht. Im Kontext der Frage passt die andere Antwort besser.
Huysentruitw
133

Um alle Containernamen und ihre IP-Adressen in nur einem Befehl abzurufen.

docker inspect -f '{{.Name}} - {{.NetworkSettings.IPAddress }}' $(docker ps -aq)

Wenn Sie docker-composeden Befehl verwenden, lautet dieser:

docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)

Die Ausgabe wird sein:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
Hemerson Varela
quelle
5
Ich mag das wirklich, aber es funktioniert auch nicht für Docker Compose, was mit einem eigenen Netzwerk zu tun hat. Wechseln Sie stattdessen {{.NetworkSettings.IPAddress }}zu{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek
Hier ist die Variante, die ich benutze : docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. Das sed(1)entfernt leere Zeilen für Container, die vorhanden sind, aber keine IP-Adresse haben.
NYCeyes
97

Fügen Sie dieses Shell-Skript in Ihre ~/.bashrcoder eine relevante Datei ein:

docker-ip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

Um eine IP-Adresse eines Containers zu erhalten, gehen Sie einfach wie folgt vor:

docker-ip YOUR_CONTAINER_ID

Verwenden Sie für die neue Version des Docker Folgendes:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
Tuong Le
quelle
5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
Saiyancoder
Das funktioniert für mich, muss abersource ~/.bash_profile
Penny Chan
1
Sie erhalten diesen Fehler, wenn Sie nicht einen laufenden Container untersuchen, sondern nur ein Bild ... ein Bild hat keine IP-Adresse ... schreckliche Fehlermeldung, ja
dagelf
37

Alle IP-Adressen des Containers anzeigen:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
Zhouji
quelle
37

In Docker 1.3+ können Sie dies auch überprüfen mit:

Geben Sie den laufenden Docker (Linux) ein:

docker exec [container-id or container-name] cat /etc/hosts
172.17.0.26 d8bc98fa4088
127.0.0.1   localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.17.0.17 mysql

Für Windows:

docker exec [container-id or container-name] ipconfig
Jake W.
quelle
1
oder einfachdocker exec [container-name-or-id] ip a
Stephan Richter
für Windowsdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz
27

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:

docker network inspect bridge

Daraufhin sollte ein Container-Abschnitt zurückgegeben werden, in dem die IP-Adresse für diesen laufenden Container angezeigt wird.

[
    {
        "Name": "bridge",
        "Id": "40561e7d29a08b2eb81fe7b02736f44da6c0daae54ca3486f75bfa81c83507a0",
        "Scope": "local",
        "Driver": "bridge",
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16"
                }
            ]
        },
        "Containers": {
            "025d191991083e21761eb5a56729f61d7c5612a520269e548d0136e084ecd32a": {
                "Name": "drunk_leavitt",
                "EndpointID": "9f6f630a1743bd9184f30b37795590f13d87299fe39c8969294c8a353a8c97b3",
                "IPv4Address": "172.17.0.2/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        }
    }
]
Athena
quelle
Was bedeutet es, wenn Ihr Containerbereich leer ist? Der Container ist jedoch betriebsbereit.
StackEdd
24

Ausführen:

docker ps -a

Dadurch werden aktive Docker-Bilder angezeigt:

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS                       PORTS               NAMES
3b733ae18c1c        parzee/database     "/usr/lib/postgresql/"   6 minutes ago       Up 6 minutes                 5432/tcp            serene_babbage

Verwenden Sie den CONTAINER ID-Wert:

docker inspect <CONTAINER ID> | grep -w "IPAddress" | awk '{ print $2 }' | head -n 1 | cut -d "," -f1

172.17.0.2

Gogasca
quelle
23

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 .bashrcAkte.

docker-ips() {
    docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
}

docker-ip() {
  docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}

Der erste Befehl gibt die IP-Adresse aller Container und der zweite die IP-Adresse eines bestimmten Containers an.

docker-ips
docker-ip YOUR_CONTAINER_ID
Silgon
quelle
16

Referenzcontainer nach Namen:

docker run ... --name pg-master

Dann holen Sie sich die IP-Adresse nach Namen:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)
Sameer C.
quelle
15

Ich habe das folgende Bash-Skript geschrieben, um eine Tabelle mit IP-Adressen von allen Containern abzurufen, unter denen ausgeführt wird docker-compose.

function docker_container_names() {
    docker ps -a --format "{{.Names}}" | xargs
}

# Get the IP address of a particular container
dip() {
    local network
    network='YOUR-NETWORK-HERE'
    docker inspect --format "{{ .NetworkSettings.Networks.$network.IPAddress }}" "$@"
}

dipall() {
    for container_name in $(docker_container_names);
    do
        local container_ip=$(dip $container_name)
        if [[ -n "$container_ip" ]]; then
            echo $(dip $container_name) " $container_name"
        fi
    done | sort -t . -k 3,3n -k 4,4n
}

Sie sollten das variable Netzwerk in Ihren eigenen Netzwerknamen ändern.

Dunk
quelle
1
Die Antwort von hier auf stackoverflow.com/questions/17157721/… vermeidet, dass das Netzwerk in dip () angegeben werden muss: docker inspect --format '{{range .NetworkSettings.Networks}} {{. IPAddress}} {{end} } '"$ @"
JoanComasFdz
1
@JoanComasFdz du hast mich gerettet vielen Dank!
Chagai Friedlander
14

Hier ist eine schnelle Antwort:

Holen Sie sich Ihren Containernamen oder Ihre ID:

docker container ls

Dann holen Sie sich die IP:

docker inspect <container_ID Or container_name> |grep 'IPAddress'

Holen Sie sich den Hafen:

docker inspect <container_ID Or container_name> |grep 'Port'
Benyamin Jafari
quelle
13

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 ( -ffür "Format"):

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

Für die Container-ID oder den Namen können Sie den Befehl ausführen

docker container ls

Dadurch wird jeder laufende Container aufgelistet.

Rushal Verma
quelle
1
Das ist sehr nützlich. Wo finde ich Dokumentation zum Schreiben meiner eigenen Go-Abfragen?
Michael Hoffmann
12

Hier ist eine Lösung, die ich heute in Python entwickelt habe und die die docker inspect containerJSON-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.

#!/usr/bin/python

import json
import subprocess
import sys

try:
    CONTAINER = sys.argv[1]
except Exception as e:
    print "\n\tSpecify the container name, please."
    print "\t\tEx.:  script.py my_container\n"
    sys.exit(1)

# Inspecting container via Subprocess
proc = subprocess.Popen(["docker","inspect",CONTAINER],
                      stdout=subprocess.PIPE,
                      stderr=subprocess.STDOUT)

out = proc.stdout.read()
json_data = json.loads(out)[0]

net_dict = {}
for network in json_data["NetworkSettings"]["Networks"].keys():
    net_dict['mac_addr']  = json_data["NetworkSettings"]["Networks"][network]["MacAddress"]
    net_dict['ipv4_addr'] = json_data["NetworkSettings"]["Networks"][network]["IPAddress"]
    net_dict['ipv4_net']  = json_data["NetworkSettings"]["Networks"][network]["IPPrefixLen"]
    net_dict['ipv4_gtw']  = json_data["NetworkSettings"]["Networks"][network]["Gateway"]
    net_dict['ipv6_addr'] = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6Address"]
    net_dict['ipv6_net']  = json_data["NetworkSettings"]["Networks"][network]["GlobalIPv6PrefixLen"]
    net_dict['ipv6_gtw']  = json_data["NetworkSettings"]["Networks"][network]["IPv6Gateway"]
    for item in net_dict:
        if net_dict[item] == "" or net_dict[item] == 0:
            net_dict[item] = "null"
    print "\n[%s]" % network
    print "\n{}{:>13} {:>14}".format(net_dict['mac_addr'],"IP/NETWORK","GATEWAY")
    print "--------------------------------------------"
    print "IPv4 settings:{:>16}/{:<5}  {}".format(net_dict['ipv4_addr'],net_dict['ipv4_net'],net_dict['ipv4_gtw'])
    print "IPv6 settings:{:>16}/{:<5}  {}".format(net_dict['ipv6_addr'],net_dict['ipv6_net'],net_dict['ipv6_gtw'])

Die Ausgabe ist:

$ python docker_netinfo.py debian1

[frontend]

02:42:ac:12:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.18.0.2/16     172.18.0.1
IPv6 settings:            null/null   null

[backend]

02:42:ac:13:00:02   IP/NETWORK        GATEWAY
--------------------------------------------
IPv4 settings:      172.19.0.2/16     172.19.0.1
IPv6 settings:            null/null   null
ivanleoncz
quelle
Bitte ändern Sie in einem Skript zu Python2.7, Python3 wird jetzt allgemein verwendet, oder schreiben Sie zwei Versionen
42n4
Ich werde mein Gist aktualisieren und sobald ich es habe, werde ich hier posten. In der Tat wurde dieser Wrapper für Python 2.7 entwickelt. Danke für die Rückmeldung!
ivanleoncz
9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

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:

docker exec <containername or containerID here> /sbin/ifconfig eth0 | grep 'inet addr:' | cut -d: -f2 | awk '{ print $1}'
Aravind Murthy
quelle
9

Um die Antwort von ko-dos zu erweitern, ist hier ein Alias, um alle Containernamen und ihre IP-Adressen aufzulisten:

alias docker-ips='docker ps | tail -n +2 | while read -a a; do name=${a[$((${#a[@]}-1))]}; echo -ne "$name\t"; docker inspect $name | grep IPAddress | cut -d \" -f 4; done'
Marco Roy
quelle
1
Das kann einiges vereinfacht werden - verwenden Sie docker ps -q, um das zu vermeiden tailund --formatum das grep zu vermeiden. Sie können auch mehrere Container-IDs an die docker inspectShell übergeben , anstatt sie zu schleifen.
Bryan
1
docker ps -qZeigt nur die numerischen IDs der Container an, aber ich denke, es ist besser, ihren Namen zu verwenden. taildient 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 ... die grepIMO war besser lesbar.
Marco Roy
1
Leicht geänderte Version, in der IPs zuerst in einer Zeile zusammen mit dem Containernamen aufgelistet werden: docker ps | Schwanz -n +2 | während -aa lesen; do name = $ {a [$ (($ {# a [@]} - 1))]}; Docker inspizieren $ name | grep "IPAddress. * [0-9] \ +" | cut -d \ "-f 4 | tr" \ n "" "; echo -e" \ t $ {name} "; done
Gilead
Endete mit:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Antogerva
9

Ich benutze diesen einfachen Weg

docker exec -it <container id or name> hostname -i

z.B

ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5
Lemix
quelle
7

Wenn Sie Docker mithilfe der Docker Toolbox installiert haben, können Sie die Kitematic-Anwendung verwenden, um die Container-IP-Adresse abzurufen:

  1. Wählen Sie den Container aus
  2. Klicken Sie auf Einstellungen
  3. Klicken Sie auf die Registerkarte Ports.
Fernando Montoya
quelle
Für mich war die IP-Adresse auf der Registerkarte "Hostname / Ports", aber dies war trotzdem eine sehr hilfreiche Antwort! Beachten Sie, dass docker inspectdies 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.
Göran Roseen
7

So erhalten Sie die IP-Adresse und den Host-Port eines Containers:

docker inspect containerId | awk '/IPAddress/ || /HostPort/'

Ausgabe:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",
Raj Asapu
quelle
7

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 :

dockip() {
  docker inspect --format '{{ .NetworkSettings.IPAddress }}' "$@"
}

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 ".

--cidfile="app.cid": Write the container ID to the file

Verwenden einer PID-Datei:

  1. Wenn der Container mit einem --cidfileParameter ausgeführt wird, sieht der app.cidDateiinhalt folgendermaßen aus:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Sie können Dateiinhalte verwenden, um Docker-Container zu überprüfen:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Sie können die Container-IP mithilfe eines Inline-Python-Skripts extrahieren:

    $ docker inspect `cat app.cid` | python -c "import json;import sys;\
    sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])"
    172.17.0.2
    

Hier ist eine menschlichere Form:

#!/usr/bin/env python
# Coding: utf-8
# Save this file like get-docker-ip.py in a folder that in $PATH
# Run it with
# $ docker inspect <CONTAINER ID> | get-docker-ip.py

import json
import sys

sys.stdout.write(json.load(sys.stdin)[0]['NetworkSettings']['IPAddress'])

Weitere Informationen finden Sie unter " 10 Alternativen zum Abrufen der Docker-Container-IP-Adressen ".

Guneysos
quelle
6

Für Windows 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId
Hai Nguyen
quelle
5

Dadurch werden alle Container-IPs auf dem Host aufgelistet:

sudo docker ps -aq | while read line;  do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
rajdeepbs29
quelle
5

Docker inspect verwendet, um alle Container-IPs und ihre jeweiligen Namen zu drucken

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
KARTHIKEYAN.A
quelle
5

Nur der Vollständigkeit halber:

Ich mag die --formatOption wirklich , aber zuerst war ich mir dessen nicht bewusst, also habe ich einen einfachen Python-Einzeiler verwendet, um das gleiche Ergebnis zu erzielen:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
sedi
quelle
Das ist die coolste Antwort. Siehe auch eine andere Antwort - stackoverflow.com/a/36306632/432903
prayagupd
5

Kombinieren früherer Antworten mit dem Finden der Container-ID basierend auf dem Docker-Image-Namen:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`
Gene Hazan
quelle
4

Verwenden:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
Alex Liffick
quelle
Dies ist der eigentliche einzeilige Befehl. Folgendes habe ich bekommen. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal
4

Für Windows-Container verwenden

docker exec <container> ipconfig

Wo <container>ist der Name oder die ID des Containers

Sie können verwenden docker ps, um die ID des Containers zu finden.

Kirodge
quelle
Denken Sie daran, "—rm" zu verwenden, da sonst der Festplattenspeicher mit nicht gelöschten Schichten langsam aufgebraucht wird. In fast allen Fällen ist es gut, "-rm" mit "run" zu koppeln.
Contango
@Contango: 'docker exec' führt einen Befehl in einem bereits laufenden Container aus. Es gibt keinen --rm-Schalter. docs.docker.com/engine/reference/commandline/exec
kirodge
4

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/

$ docker volume create portainer_data
$ docker run -d -p 9000:9000 -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer

Dort finden Sie alle Informationen zum Container auch IP.

igor
quelle
4
Während dieser Link möglicherweise die Frage beantwortet, werden bei Stack Overflow von Antworten nur auf Links abgeraten. Sie können diese Antwort verbessern, indem Sie wichtige Teile des Links in Ihre Antwort aufnehmen. Dadurch wird sichergestellt, dass Ihre Antwort immer noch eine Antwort ist, wenn der Link geändert wird oder entfernt :)
WhatsThePoint