Jak uzyskać adres IP kontenera dokera z hosta

Czy istnieje Komenda, którą mogę uruchomić, aby pobrać adres IP kontenera bezpośrednio z hosta po utworzeniu nowego kontenera?

Zasadniczo, gdy Docker stworzy kontener, chcę uruchomić własne skrypty implementacji kodu i konfiguracji kontenera.

 1582
Author: the Tin Man, 2013-06-17

30 answers

Na ratunek przychodzi opcja --format z inspect.

Nowoczesna składnia klienta Dockera to:

docker inspect -f '{{range.NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
Składnia Starego Klienta Dockera to:
docker inspect --format '{{ .NetworkSettings.IPAddress }}' container_name_or_id

Te polecenia zwrócą adres IP kontenera dokera.

Jak wspomniano w komentarzach: jeśli korzystasz z systemu Windows, używaj podwójnych cudzysłowów " zamiast pojedynczych cudzysłowów ' wokół nawiasów klamrowych.

 2655
Author: WouterD,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-13 11:52:18

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

Na przykład:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
 531
Author: creack,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-19 23:51:41

Najpierw pobierz identyfikator kontenera:

docker ps

(Pierwsza kolumna to identyfikator kontenera)

Użyj identyfikatora kontenera do uruchomienia:

docker inspect <container ID>

Na dole, pod" NetworkSettings", znajdziesz "IPAddress"

Lub po prostu zrób:

docker inspect <container id> | grep "IPAddress"
 439
Author: Krunal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-09 15:14:14
docker inspect CONTAINER_ID | grep "IPAddress"

Możesz dodać -i do grepa za ignorowanie sprawy, wtedy nawet następujące czynności będą działać:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
 232
Author: nPcomp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 23:29:07

Aby pobrać wszystkie nazwy kontenerów i ich adresy IP w jednym poleceniu.

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

Jeśli używasz docker-compose komenda będzie następująca:

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

Wyjście będzie:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
 150
Author: Hemerson Varela,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:53:38

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

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

Następnie, aby uzyskać adres IP kontenera, po prostu zrób to:

docker-ip YOUR_CONTAINER_ID

W przypadku nowej wersji Dockera należy użyć następującego kodu:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
 99
Author: Tuong Le,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:40:07

W Docker 1.3+, można również sprawdzić go za pomocą:

Wprowadź uruchomiony Docker (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 windows:

docker exec [container-id or container-name] ipconfig
 42
Author: Jake W,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:08:45

Pokaż wszystkie adresy IP kontenera:

docker inspect --format='{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $(docker ps -aq)
 40
Author: zhouji,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:08:21

Od wersji Dockera 1.10.3, build 20f81dd

Jeśli nie powiedziałeś Dockerowi inaczej, Docker zawsze uruchamia Twoje kontenery w sieci bridge. Możesz więc spróbować tego polecenia poniżej:

docker network inspect bridge

, która następnie powinna zwrócić sekcję Containers, która wyświetli adres IP dla tego uruchomionego 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"
        }
    }
]
 31
Author: Athena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-08 14:06:14

Wykonanie:

docker ps -a

Wyświetli aktywne obrazy 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 kontenera:

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

"172.17.0.2"

 27
Author: gogasca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-02-24 09:59:49

Bazując na niektórych odpowiedziach, które mi się podobały, postanowiłem połączyć je w funkcję, która pobierze wszystkie adresy IP i inną dla konkretnego kontenera. Są teraz w moim .bashrc pliku.

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 adres IP konkretnego kontenera.

docker-ips
docker-ip YOUR_CONTAINER_ID
 25
Author: silgon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 17:03:23

Oto szybka odpowiedź robocza:

Pobierz nazwę lub identyfikator kontenera:

docker container ls

Następnie pobierz IP:

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

Pobierz port:

docker inspect <container_ID Or container_name> |grep 'Port'
 18
Author: Benyamin Jafari,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:13:32

Kontenery referencyjne według nazwy:

docker run ... --name pg-master

Następnie chwyć adres IP po nazwie:

MASTER_HOST=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' pg-master)
 16
Author: Sameer C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:44:24

Oto rozwiązanie, które opracowałem dzisiaj w Pythonie, używając wyjścia docker inspect container 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 . Dlatego stworzyłem ten scenariusz.

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

Wyjście jest:

$ 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
 16
Author: ivanleoncz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:15:16

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

Należy zmienić zmienną network na własną nazwę sieci.

 15
Author: Dunk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:48:30

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

Aby sprawdzić adres IP konkretnego kontenera, należy uruchomić polecenie (-f dla "format"):

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

Dla identyfikatora kontenera lub nazwy można uruchomić polecenie

docker container ls

Który wyświetli listę wszystkich uruchomionych kontenerów.

 15
Author: Rushal Verma,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:11:56

Używam tego prostego sposobu

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

E. g

ubuntu@myhost:~$ docker exec -it 3d618ac670fe hostname -i
10.0.1.5
 11
Author: Lemix,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-09-11 09:55:42
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Powyższe działanie działa, jeśli kontener jest wdrożony do domyślnej sieci bridge.

Jednak, jeśli używasz niestandardowej sieci mostkowej lub sieci nakładkowej, uznałem, ż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
Author: Aravind Murthy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-04-18 10:12:20

Aby rozszerzyć odpowiedź ko-dos ' a, oto alias do listy 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'
 9
Author: Marco Roy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:42:21

Uwaga!!! Docker Compose użycie:

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


Najbardziej eleganckim i łatwym sposobem jest zdefiniowanie funkcji powłoki, obecnie najczęściej głosowana odpowiedź @WouterD ' s :

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

Docker może zapisywać identyfikatory kontenerów do pliku takiego jak programy linuksowe:

Uruchomiony z --cidfile=filename, Docker zrzuca identyfikator kontenera do "filename".

Zobacz "Docker uruchamia sekcję równoważnika PID " aby uzyskać więcej informacji.

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

Użycie pliku PID:

  1. Uruchamiając kontener z parametrem --cidfile, zawartość pliku app.cid wygląda następująco:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Możesz użyć zawartości pliku do sprawdzenia kontenerów Dockera:

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

    $ 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 człowiekowi 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'])

Zobacz " 10 alternatywy uzyskania adresów IP kontenera dokera " aby uzyskać więcej informacji.

 9
Author: guneysus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:28:41

Łączenie poprzednich odpowiedzi ze znalezieniem identyfikatora kontenera na podstawie nazwy obrazu dokera:

docker inspect --format '{{ .NetworkSettings.IPAddress }}' `docker ps | grep $IMAGE_NAME | sed 's/\|/ /' | awk '{print $1}'`
 8
Author: Gene H.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:29:48

Moja odpowiedź:

docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq
) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n

Również jako alias bash:

docker-ips() {   docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} %tab% {{.Name}}' $(docker ps -aq) | sed 's#%tab%#\t#g' | sed 's#/##g' | sort -t . -k 1,1n -k 2,2n -k 3,3n -k 4,4n }

Wyjście jest sortowane według adresu IP i rozdzielane tabulatorami:

# docker-ips
172.18.0.2       memcached
172.18.0.3       nginx
172.18.0.4       fpm-backup
172.18.0.5       dns
172.18.0.6       fpm-beta
172.18.0.7       exim
172.18.0.8       fpm-delta
172.18.0.9       mariadb
172.18.0.10      fpm-alpha
172.19.0.2       nextcloud-redis
172.19.0.3       nextcloud-db
172.19.0.4       nextcloud
 8
Author: ctrlbrk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-07-21 21:29:18

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

  1. Wybierz kontener
  2. Kliknij na ustawienia
  3. Kliknij w zakładce porty.
 7
Author: Fernando Montoya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-03-11 16:53:10

Aby uzyskać adres IP i port hosta kontenera:

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

Wyjście:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",
 7
Author: Raj Asapu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-04-11 19:21:55

Tylko dla kompletności:

Bardzo podoba mi się opcja --format, ale na początku nie byłem tego świadomy, więc użyłem prostego Pythona one-liner, aby uzyskać ten sam wynik:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
 7
Author: sedi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:29:27

Dla windows 10:

docker inspect --format "{{ .NetworkSettings.IPAddress }}"  containerId
 6
Author: Hai Nguyen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-08 10:46:00

Docker inspect służy do drukowania wszystkich adresów IP kontenera i ich odpowiednich nazw

docker ps -q | xargs -n 1 docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}} {{ .Name }}' | sed 's/ \// /'
 6
Author: KARTHIKEYAN.A,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-03-14 06:09:25

Dla tych, którzy przybyli z Google, aby znaleźć rozwiązanie do wykonywania poleceń z terminala (nie przez skrypt), " jid ", który jest interaktywnym narzędziem JSON drill-down z autouzupełnianiem i sugestią, pozwala zrobić to samo z mniejszą ilością pisania.

docker inspect $CID | jid

Wpisz Tab . Net Tab a zobaczysz coś w stylu:

[Filter]> .[0].NetworkSettings
{
  "Bridge": "",
  "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
  "Gateway": "172.17.0.1",
  "GlobalIPv6Address": "",
  "GlobalIPv6PrefixLen": 0,
  "HairpinMode": false,
  "IPAddress": "172.17.0.2",
  "IPPrefixLen": 16,
  "IPv6Gateway": "",
  "LinkLocalIPv6Address": "",
  "LinkLocalIPv6PrefixLen": 0,
  "MacAddress": "02:42:ac:11:00:02",
  "Networks": {
    "bridge": {
      "Aliases": null,
      "EndpointID": "b69eb8bd4f11d8b172c82f21ab2e501fe532e4997fc007ed1a997750396355d5",
      "Gateway": "172.17.0.1",
      "GlobalIPv6Address": "",

Typ .IPA Tab i zobaczysz coś w stylu:

[Filter]> .[0].NetworkSettings.IPAddress
"172.17.0.2"
 6
Author: Joel Handwell,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-12-20 18:32:40

Wyświetli listę wszystkich adresów IP kontenera na serwerze:

sudo docker ps -aq | while read line;  do sudo docker inspect -f '{{.Name}} - {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' $line ; done
 5
Author: rajdeepbs29,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-31 09:02:15

Przyjęta odpowiedź nie działa dobrze z wieloma sieciami na kontener:

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

172.20.0.4172.18.0.5

Następna najlepsza odpowiedź jest bliższa:

> docker inspect cc54d96d63ea | grep "IPAddress"

"SecondaryIPAddresses": null,
"IPAddress": "",
    "IPAddress": "172.20.0.4",
    "IPAddress": "172.18.0.5",

Lubię używać jq do analizy JSON sieci:

> docker inspect cc54d96d63ea | jq -r 'map(.NetworkSettings.Networks) []'

{
  "proxy": {
    "IPAMConfig": null,
    "Links": [
      "server1_php_1:php",
      "server1_php_1:php_1",
      "server1_php_1:server1_php_1"
    ],
    "Aliases": [
      "cc54d96d63ea",
      "web"
    ],
    "NetworkID": "7779959d7383e9cef09c970c38c24a1a6ff44695178d314e3cb646bfa30d9935",
    "EndpointID": "4ac2c26113bf10715048579dd77304008904186d9679cdbc8fcea65eee0bf13b",
    "Gateway": "172.20.0.1",
    "IPAddress": "172.20.0.4",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:14:00:04",
    "DriverOpts": null
  },
  "webservers": {
    "IPAMConfig": null,
    "Links": [
      "server1_php_1:php",
      "server1_php_1:php_1",
      "server1_php_1:server1_php_1"
    ],
    "Aliases": [
      "cc54d96d63ea",
      "web"
    ],
    "NetworkID": "907a7fba8816cd0ad89b7f5603bbc91122a2dd99902b504be6af16427c11a0a6",
    "EndpointID": "7febabe380d040b96b4e795417ba0954a103ac3fd37e9f6110189d9de92fbdae",
    "Gateway": "172.18.0.1",
    "IPAddress": "172.18.0.5",
    "IPPrefixLen": 24,
    "IPv6Gateway": "",
    "GlobalIPv6Address": "",
    "GlobalIPv6PrefixLen": 0,
    "MacAddress": "02:42:ac:12:00:05",
    "DriverOpts": null
  }
}

Aby wyświetlić listę adresów IP każdego kontenera, należy:

for s in `docker ps -q`; do
  echo `docker inspect -f "{{.Name}}" ${s}`:
  docker inspect ${s} | jq -r 'map(.NetworkSettings.Networks) []' | grep "IPAddress";
done

/server1_web_1:
    "IPAddress": "172.20.0.4",
    "IPAddress": "172.18.0.5",
/server1_php_1:
    "IPAddress": "172.20.0.3",
    "IPAddress": "172.18.0.4",
/docker-gen:
    "IPAddress": "172.18.0.3",
/nginx-proxy:
    "IPAddress": "172.20.0.2",
    "IPAddress": "172.18.0.2",
 5
Author: Drakes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2019-02-28 10:12:07