Jak uzyskać adres IP kontenera Docker od hosta

1408

Czy istnieje polecenie, które mogę uruchomić, aby uzyskać adres IP kontenera bezpośrednio z hosta po utworzeniu nowego kontenera?

Zasadniczo, gdy Docker utworzy kontener, chcę uruchomić własne skrypty wdrażania i konfiguracji kontenera.

Murali Allada
źródło
28
Chciałem tylko upewnić się, że inne nooby nie popełniają mojego błędu i spróbować uzyskać adres IP z obrazu zamiast z kontenera. Upewnij się, że otrzymasz identyfikator CID lub identyfikator kontenera i zapytaj o to; CID za pośrednictwem „docker ps”, to znaczy.
Paul Gregoire,
Jak zdobyć odwrotnie? Host IP czy połączenie z kontenera?
Somnath Muluk

Odpowiedzi:

2324

--formatOpcja inspectprzychodzi na ratunek.

Współczesna składnia klienta Docker to:

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

Stara składnia klienta Docker to:

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

Te polecenia zwrócą adres IP kontenera Dockera.

Jak wspomniano w komentarzach: w systemie Windows używaj podwójnych cudzysłowów "zamiast pojedynczych cudzysłowów 'wokół nawiasów klamrowych.

WouterD
źródło
34
To o wiele lepsze rozwiązanie. Zapytaj tylko o to, czego potrzebujesz, jeśli to możliwe!
MikeyB
8
Hmm Uzyskiwanie <no value>odpowiedzi na komputerze Mac przy użyciu Fig / Boot2Docker
cevaris
2
@cevaris Otrzymasz, <no value>jeśli spróbujesz uruchomić to na kontenerze, który nie jest uruchomiony. Upewnij się, że Twój kontener działa, zanim to zrobisz.
TheJediCowboy
55
!OSTRZEŻENIE! To już nie działa. Nowy format jest specyficzny dla kontenera i ma formę {{ .NetworkSettings.Networks.$network.IPAddress }}. Domyślnie wydaje się, że jest to most, ale pod komponentem dokującym będzie to konkretna nazwa, która zależy od nazwy twojej aplikacji (myślę z flagi --project-name, choć będzie to również zależeć od rodzaju konfiguracji sieci skonfigurowałeś). Pełną odpowiedź napisałem w odpowiedzi tutaj stackoverflow.com/questions/17157721/…
Dunk
5
Może jestem śpiącą owcą, ale ostrzeżenie o podwójnych cytatach nie było odważne i wystarczająco mrugające, by zwrócić moją uwagę. Może podaj dwa przykłady wyraźnie oznaczone Linux i Windows. Dosłownie po prostu wpisałem przykład, sprawdziłem dokumenty, które również używają pojedynczych cudzysłowów, a następnie przejrzałem błąd. Jestem pewien, że nie jestem sam.
Wyck
513

Możesz użyć docker inspect <container id> .

Na przykład:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
skrzyp
źródło
67
Aby wyodrębnić ip, możesz zrobić coś takiego docker inspect $CID | grep IPAddress | cut -d '"' -f 4, działa dobrze :)
creack
9
Łącząc to wszystko razem, ten alias powłoki powinien zawierać listę wszystkich identyfikatorów kontenerów i ich adresów IP: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
Jak wspomniano w @ user3119830, istnieje nowa opcja kontroli. Teraz możesz uzyskać Ip łatwiejdocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack
16
Tylko uwaga. Opcje pojedynczego myślnika są przestarzałe, aby -format stał się --format.
jamtur01
7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}to nowa składnia. -formatjest przestarzałe, staje się --format.
Devy,
408

Najpierw pobierz identyfikator kontenera:

docker ps

(Pierwsza kolumna dotyczy identyfikatora kontenera)

Użyj identyfikatora kontenera, aby uruchomić:

docker inspect <container ID>

Na dole, w „NetworkSettings”, znajdziesz „IPAddress”

Lub po prostu zrób:

docker inspect <container id> | grep "IPAddress"
Krunal
źródło
5
Szkoda, w jednym z moich wystąpień (rozpoczęte od docker run -it MYCONTAINER /bin/bash) wyjście inspectnie ma sekcji NetworkSettings!
Eric,
3
To nie działa w systemie Windows 10. Musisz także znaleźć adres IP DockerNAT za pomocą ipconfig.
ntiedt
@ Eric Możesz również sprawdzić most sieciowy:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński
5
Zdecydowanie wolę ... | grep IProzwiązanie od wszystkich szczegółów formatowania wymaganych do uzyskania adresu IP. +1
d8aninja
1
@Eric - pomyliłeś pojemnik z obrazem . Komenda jest w rzeczywistości docker run -it MYIMAGE(to nie jest nazwa kontenera ); jeśli to zrobisz docker inspect MYIMAGE, otrzymasz statyczne informacje o obrazie . Musisz znaleźć nazwę działającego kontenera (lub użyć jego identyfikatora, jak sugerują inni). W moim systemie pierwszy taki kontener utworzony z tego obrazu ma domyślną nazwę MYIMAGE_1, podobnie jak docker inspect MYIMAGE_1NetworkSettings.
ToolmakerSteve
215
docker inspect CONTAINER_ID | grep "IPAddress"

Możesz dodać -ido grep, aby zignorować sprawę, a nawet następujące będą działać:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
nPcomp
źródło
5
czym ta odpowiedź jest lepsza / różni się od pozostałych 22?
sds
To zdecydowanie nie najlepsza odpowiedź. Odpowiedź WouterD to odpowiedź, której szukasz.
M.Vanderlee
7
@ M. Vanderlee ta odpowiedź ma łatwiejsze do zapamiętania polecenie, co czyni ją lepszą odpowiedzią IMO.
huysentruitw
1
@ WouterHuysentruit Pewnie, ale otrzymujesz wiele wpisów i rzeczywisty tekst „Adres IP”. Nie możesz użyć go w skrypcie bez dalszej manipulacji.
M.Vanderlee,
Masz rację. W kontekście pytania druga odpowiedź pasuje lepiej.
huysentruitw
133

Aby uzyskać wszystkie nazwy kontenerów i ich adresy IP za pomocą jednego polecenia.

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

Jeśli używasz docker-composepolecenia, będzie to:

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

Dane wyjściowe będą:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
Hemerson Varela
źródło
5
Naprawdę podoba mi się to, ale nie działa również w Docker Compose, co ma związek z posiadaniem własnej sieci. Zamiast tego zmień {{.NetworkSettings.IPAddress }}na{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek
Oto używam odmiana: docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. W sed(1)usuwa puste linie do pojemników obecne, ale nie posiadające-adres IP.
NYCeyes
97

Dodaj ten skrypt powłoki do swojego ~/.bashrclub odpowiedniego pliku:

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

Następnie, aby uzyskać adres IP kontenera, po prostu wykonaj następujące czynności:

docker-ip YOUR_CONTAINER_ID

W przypadku nowej wersji Dockera użyj następujących opcji:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
Tuong Le
źródło
5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
saiyancoder,
to działa dla mnie, ale muszęsource ~/.bash_profile
penny chan
1
Ten błąd pojawi się, jeśli nie sprawdzasz działającego kontenera, ale tylko obraz ... obraz nie ma
adresu IP
37

Pokaż wszystkie adresy IP kontenera:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
zhouji
źródło
37

W Docker 1.3+ możesz to również sprawdzić za pomocą:

Wejdź do działającego Dockera (Linux):

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

Dla Windowsa:

docker exec [container-id or container-name] ipconfig
Jake W.
źródło
1
lub po prostudocker exec [container-name-or-id] ip a
Stephan Richter
dla systemu Windowsdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz
27

Od wersji Docker 1.10.3 kompilacja 20f81dd

O ile nie powiesz Dockerowi inaczej, Docker zawsze uruchamia twoje kontenery w sieci mostów. Możesz więc wypróbować to polecenie poniżej:

docker network inspect bridge

Który powinien następnie zwrócić sekcję Kontenery, która wyświetli adres IP tego działającego kontenera.

[
    {
        "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"
        }
    }
]
Atena
źródło
co to znaczy, że twoja sekcja kontenerów jest pusta? Mimo to kontener jest gotowy do pracy.
StackEdd
24

Wykonać:

docker ps -a

Spowoduje to wyświetlenie aktywnych obrazów dokera:

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

Użyj wartości ID POJEMNIKA:

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

„172.17.0.2”

gogasca
źródło
23

W oparciu o niektóre odpowiedzi, które kochałem, postanowiłem połączyć je z funkcją, aby uzyskać wszystkie adresy IP i inną dla konkretnego kontenera. Są teraz w moim .bashrcpliku.

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

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

Pierwsze polecenie podaje adres IP wszystkich kontenerów, a drugie konkretny adres IP kontenera.

docker-ips
docker-ip YOUR_CONTAINER_ID
silgon
źródło
16

Referencyjne kontenery według nazwy:

docker run ... --name pg-master

Następnie pobierz adres IP według nazwy:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)
Sameer C.
źródło
15

Napisałem następujący skrypt Bash, aby uzyskać tabelę adresów IP ze wszystkich uruchomionych kontenerów 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
}

Powinieneś zmienić zmienną sieć na własną nazwę sieci.

Maczać
źródło
1
Odpowiedź Tuong Le stackoverflow.com/questions/17157721/... pozwala uniknąć konieczności określania sieci w dip (): docker inspect --format '{{range .NetworkSettings.Networks}} {{. IPAddress}} {{end} } „$ @”
JoanComasFdz
1
@JoanComasFdz tak bardzo mnie uratowałeś dzięki!
Chagai Friedlander
14

Oto szybka działająca odpowiedź:

Uzyskaj nazwę lub identyfikator kontenera:

docker container ls

Następnie uzyskaj adres IP:

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

Uzyskaj port:

docker inspect <container_ID Or container_name> |grep 'Port'
Benyamin Jafari
źródło
13

Docker jest napisany w Go i używa również składni Go do celów zapytań.

Aby sprawdzić adres IP konkretnego kontenera, musisz uruchomić polecenie ( -fdla „format”):

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

Dla identyfikatora lub nazwy kontenera możesz uruchomić polecenie

docker container ls

która wyświetli listę każdego działającego kontenera.

Rushal Verma
źródło
1
To jest bardzo przydatne. Gdzie mogę znaleźć dokumentację do pisania własnych zapytań Go?
Michael Hoffmann
12

Oto rozwiązanie, które dzisiaj opracowałem w Pythonie, używając docker inspect containerwyjścia JSON jako źródła danych.

Mam wiele kontenerów i infrastruktur, które muszę sprawdzić, i muszę uzyskać podstawowe informacje o sieci z dowolnego kontenera w szybki i ładny sposób sposób. Dlatego stworzyłem ten skrypt.

WAŻNE: Od wersji 1.9 Docker umożliwia tworzenie wielu sieci i dołączanie ich do kontenerów.

#!/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'])

Dane wyjściowe to:

$ 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
źródło
Przejdź do skryptu na python2.7, python3 jest teraz w powszechnym użyciu lub napisz dwie wersje
42n4 18.04.117
Zaktualizuję swoją Gist i jak tylko ją otrzymam, opublikuję tutaj. Rzeczywiście, to opakowanie zostało zaprojektowane dla Python 2.7. Dzięki za opinie!
ivanleoncz 18.04.17
9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Powyższe działa, jeśli kontener zostanie wdrożony w domyślnej sieci mostowej.

Jeśli jednak korzystam z niestandardowej sieci pomostowej lub sieci nakładkowej, uważam, że poniżej działa lepiej:

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

Aby rozszerzyć odpowiedź ko-dos, oto alias zawierający listę wszystkich nazw kontenerów i ich adresów IP:

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
źródło
1
Można to nieco uprościć - użyj, docker ps -qaby uniknąć taili --formatuniknąć grep. Możesz również przekazać wiele identyfikatorów kontenerów docker inspectzamiast pętli w powłoce.
Bryan
1
docker ps -qwyświetla tylko numeryczne identyfikatory kontenerów, ale myślę, że lepiej używać ich nazw. tailsłuży tylko do pozbycia się pierwszego wiersza (nagłówka tabeli) i jest nadal potrzebny. Mógłbym użyć --format, jeśli: 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. Ale to nie wydaje się dużą poprawą ... grepbyło bardziej czytelne IMO.
Marco Roy,
1
Nieznacznie zmieniona wersja, która najpierw wyświetla adresy IP, w jednym wierszu wraz z nazwą kontenera: docker ps | ogon -n +2 | podczas czytania -aa; do name = $ {a [$ (($ {# a [@]} - 1))]}; doker sprawdza $ nazwa | grep "Adres IP. * [0-9] \ +" | cut -d \ "-f 4 | tr" \ n ""; echo -e "\ t $ {name}"; gotowe
Gilead
Skończyło się na:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
antogerva
9

Używam tego prostego sposobu

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

na przykład

ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5
Lemix
źródło
7

Jeśli zainstalowałeś Docker za pomocą Docker Toolbox, możesz użyć aplikacji Kitematic, aby uzyskać adres IP kontenera:

  1. Wybierz pojemnik
  2. Kliknij Ustawienia
  3. Kliknij kartę Porty.
Fernando Montoya
źródło
Dla mnie adres IP znajdował się na karcie „Nazwa hosta / porty”, ale była to jednak bardzo pomocna odpowiedź! Pamiętaj, że docker inspectnie działa po uruchomieniu przybornika dokera. Zgłasza adres IP, ale nie jest to poprawny adres, z którego będą korzystać Twoje usługi.
Göran Roseen,
7

Aby uzyskać adres IP i port hosta kontenera:

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

Wynik:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",
Raj Asapu
źródło
7

UWAGA!!! w przypadku użycia komponowania Docker:

Ponieważ Docker Compose tworzy izolowaną sieć dla każdego klastra, poniższe metody nie działają docker-compose.


Najbardziej eleganckim i najłatwiejszym sposobem jest zdefiniowanie funkcji powłoki, która jest obecnie najczęściej głosowaną odpowiedzią @ WouterD :

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

Docker może zapisywać identyfikatory kontenerów w pliku takim jak programy systemu Linux:

Bieg z --cidfile=filename , Docker zrzuca identyfikator kontenera do „filename”.

Aby uzyskać więcej informacji, zobacz „ Docker uruchamia odpowiednik PID ”.

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

Za pomocą pliku PID:

  1. Po --cidfileuruchomieniu kontenera z parametrem app.cidzawartość pliku wygląda następująco:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Możesz użyć zawartości pliku, aby sprawdzić kontenery Docker:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Możesz wyodrębnić adres IP kontenera za pomocą wbudowanego skryptu Python:

    $ 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
    

Oto bardziej przyjazna dla człowieka forma:

#!/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'])

Aby uzyskać więcej informacji, zobacz „ 10 alternatyw uzyskania adresów IP kontenera Docker ”.

guneysus
źródło
6

W systemie Windows 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId
Hai Nguyen
źródło
5

Spowoduje to wyświetlenie wszystkich adresów IP kontenerów na hoście:

sudo docker ps -aq | while read line;  do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
rajdeepbs29
źródło
5

Docker sprawdza użycie do wydrukowania wszystkich adresów IP kontenerów i ich nazw

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
KARTHIKEYAN.A
źródło
5

Dla kompletności:

Naprawdę podoba mi się ta --formatopcja, ale na początku nie zdawałem sobie z tego sprawy, więc użyłem prostej linijki Python, aby uzyskać ten sam wynik:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
sedi
źródło
To najfajniejsza odpowiedź. Zobacz także inną odpowiedź - stackoverflow.com/a/36306632/432903
prayagupd
5

Łączenie poprzednich odpowiedzi ze znajdowaniem identyfikatora kontenera na podstawie nazwy obrazu Docker:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`
Gene Hazan
źródło
4

Posługiwać się:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
Alex Liffick
źródło
To jest właściwe polecenie dla pojedynczej linii. Oto co mam. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal,
4

Dla systemu Windows kontenerów użytku

docker exec <container> ipconfig

gdzie <container>jest nazwa lub identyfikator kontenera.

Możesz użyć, docker psaby znaleźć identyfikator kontenera.

Kirodge
źródło
Pamiętaj, aby używać „—rm”, w przeciwnym razie będzie on powoli zajmował miejsce na dysku twardym z nieusuniętymi warstwami. Prawie we wszystkich przypadkach dobrze jest sparować „-rm” z „run”.
Contango,
@Contango: „docker exec” wykonuje polecenie w już działającym kontenerze. Nie ma przełącznika --rm. docs.docker.com/engine/reference/commandline/exec
kirodge
4

Jeśli zapomniałeś ID kontenera lub nie chcesz manipulować poleceniami powłoki, lepiej użyć interfejsu użytkownika, takiego jak Portainer.

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

Tam znajdziesz wszystkie informacje o kontenerze, również adres IP.

Igor
źródło
4
Chociaż ten link może odpowiedzieć na pytanie, w przypadku przepełnienia stosu odradza się tylko odpowiedzi na link, możesz poprawić tę odpowiedź, biorąc istotne części linku i umieszczając go w swojej odpowiedzi, dzięki czemu Twoja odpowiedź będzie nadal odpowiedzią, jeśli link zostanie zmieniony lub usunięte :)
WhatsThePoint