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.


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.


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

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"

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"

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

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}}' "$@"
}

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)

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

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"
        }
    }
]

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”


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

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)

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.


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'

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.


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

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}'

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'

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

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.

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

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


6

W systemie Windows 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId

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

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/ \// /'

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"]'

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}'`

4

Posługiwać się:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1

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.


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.