Cara mendapatkan alamat IP kontainer Docker dari host

1412

Apakah ada perintah yang bisa saya jalankan untuk mendapatkan alamat IP penampung langsung dari host setelah wadah baru dibuat?

Pada dasarnya, setelah Docker membuat wadah, saya ingin menggulirkan penerapan kode saya sendiri dan skrip konfigurasi wadah.

Murali Allada
sumber
28
Saya hanya ingin memastikan noobs lain tidak melakukan kesalahan dan mencoba untuk mendapatkan IP dari gambar alih-alih wadah. Pastikan Anda mendapatkan CID atau id kontainer dan menanyakannya; CID via 'buruh pelabuhan ps' itu.
Paul Gregoire
Bagaimana cara mendapatkan sebaliknya? Host IP atau panggilan dari wadah?
Somnath Muluk

Jawaban:

2331

The --formatpilihan untuk inspectdatang untuk menyelamatkan.

Sintaks klien Docker modern adalah:

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

Sintaks klien Docker lama adalah:

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

Perintah-perintah ini akan mengembalikan alamat IP penampung Docker.

Seperti disebutkan dalam komentar: jika Anda menggunakan Windows, gunakan tanda kutip ganda "sebagai ganti tanda kutip tunggal di 'sekitar kurung kurawal.

WouterD
sumber
34
Ini adalah solusi yang jauh lebih baik. Hanya tanyakan apa yang Anda butuhkan, jika mungkin!
MikeyB
8
Hmm. Mendapatkan <no value>respons di Mac menggunakan Fig / Boot2Docker
cevaris
2
@cevaris Anda akan dapatkan <no value>jika Anda mencoba menjalankan ini terhadap sebuah wadah yang tidak berjalan. Pastikan wadah Anda berjalan sebelum Anda melakukan ini.
TheJediCowboy
55
!PERINGATAN! Ini tidak berfungsi lagi. Format baru khusus untuk wadah dan mengikuti formulir {{ .NetworkSettings.Networks.$network.IPAddress }}. Standarnya tampaknya menjembatani, tetapi di bawah susunan buruh pelabuhan ini akan menjadi nama spesifik yang tergantung pada nama aplikasi Anda (saya pikir dari flag --project-name, meskipun itu juga akan tergantung pada jenis konfigurasi jaringan apa Anda telah mengatur). Saya menulis jawaban lengkap dalam jawaban di sini stackoverflow.com/questions/17157721/…
Dunk
5
Mungkin saya adalah domba yang mengantuk, tetapi peringatan tentang tanda kutip ganda tidak cukup berani dan menarik perhatian saya. Mungkin memberikan dua contoh dengan jelas berlabel Linux dan Windows. Saya benar-benar hanya mengetikkan contoh, memeriksa dokumen yang juga menggunakan tanda kutip tunggal dan kemudian mencari kesalahan di Google. Saya yakin saya tidak sendirian.
Wyck
513

Kamu bisa menggunakan docker inspect <container id> .

Sebagai contoh:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID
creack
sumber
67
Untuk mengekstrak ip, Anda dapat melakukan sesuatu seperti docker inspect $CID | grep IPAddress | cut -d '"' -f 4, ini berfungsi dengan baik :)
creack
9
Menyatukan semuanya, alias shell ini harus mencantumkan semua id kontainer dan id mereka: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
Seperti disebutkan oleh @ user3119830, ada opsi baru untuk memeriksa. Sekarang, Anda bisa mendapatkan Ip lebih mudah dengandocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack
16
Hanya sebuah catatan. Opsi tanda hubung tunggal sedang tidak digunakan lagi sehingga -format menjadi --format.
jamtur01
7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}adalah sintaks baru. -formatsudah ditinggalkan, itu menjadi --format.
Devy
408

Pertama-tama dapatkan ID kontainer:

docker ps

(Kolom pertama untuk ID wadah)

Gunakan ID kontainer untuk menjalankan:

docker inspect <container ID>

Di bagian bawah, di bawah "NetworkSettings", Anda dapat menemukan "IPAddress"

Atau Lakukan saja:

docker inspect <container id> | grep "IPAddress"
Krunal
sumber
5
Sayang sekali, pada salah satu contoh saya (dimulai dengan docker run -it MYCONTAINER /bin/bash), output dari inspecttidak memiliki bagian NetworkSettings!
Eric
3
Ini tidak berfungsi pada Windows 10. Anda juga perlu mengetahui alamat ip DockerNAT dengan ipconfig.
ntiedt
@ Eric Anda juga dapat memeriksa jembatan jaringan untuk itu:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński
5
Saya sangat menyukai ... | grep IPsolusi untuk semua detail format yang diperlukan untuk mendapatkan IP. +1
d8aninja
1
@ Eric - Anda bingung dengan wadah gambar . Perintahnya sebenarnya docker run -it MYIMAGE(itu bukan nama wadah ); jika Anda melakukannya, docker inspect MYIMAGEAnda akan mendapatkan informasi statis tentang gambar . Anda perlu menemukan nama wadah yang sedang berjalan (atau menggunakan idnya seperti yang disarankan orang lain). Di sistem saya, wadah pertama yang dibuat dari gambar itu default untuk nama MYIMAGE_1, begitu docker inspect MYIMAGE_1juga NetworkSettings.
ToolmakerSteve
216
docker inspect CONTAINER_ID | grep "IPAddress"

Anda dapat menambah -igrep untuk mengabaikan kasing kemudian bahkan yang berikut ini akan berfungsi:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"
nPcomp
sumber
5
bagaimana jawaban ini lebih baik / berbeda dari 22 lainnya?
sds
Ini jelas bukan jawaban terbaik. Jawaban WouterD adalah jawaban yang Anda cari.
M.Vanderlee
7
@ M. Vanderlee jawaban ini memiliki perintah yang lebih mudah diingat, yang membuatnya menjadi jawaban IMO yang lebih baik.
huysentruitw
1
@WouterHuysentruit Tentu, tetapi Anda mendapatkan beberapa entri dan teks "IPAddress" yang sebenarnya. Anda tidak dapat menggunakannya dalam skrip tanpa manipulasi lebih lanjut.
M.Vanderlee
Kamu benar. Dalam konteks pertanyaan, jawaban yang lain lebih cocok.
huysentruitw
133

Untuk mendapatkan semua nama kontainer dan alamat IP mereka hanya dalam satu perintah.

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

Jika Anda menggunakan docker-composeperintah akan seperti ini:

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

Outputnya adalah:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2
Hemerson Varela
sumber
5
Saya sangat suka ini tetapi tidak berfungsi untuk Docker Compose juga, ada hubungannya dengan memiliki jaringan mereka sendiri. Alih-alih berubah {{.NetworkSettings.IPAddress }}menjadi{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek
Berikut variasi saya gunakan: docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. The sed(1)Menghapus baris kosong untuk wadah ini, tetapi tidak memiliki alamat IP.
NYCeyes
97

Tambahkan skrip shell ini di ~/.bashrcfile Anda atau yang relevan:

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

Kemudian, untuk mendapatkan alamat IP suatu wadah, cukup lakukan ini:

docker-ip YOUR_CONTAINER_ID

Untuk versi baru Docker, silakan gunakan yang berikut ini:

docker-ip() {
        docker inspect --format '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$@"
}
Tuong Le
sumber
5
Template parsing error: template: :1:19: executing "" at <.NetworkSettings.IPA...>: map has no entry for key "NetworkSettings"
saiyancoder
ini bekerja untuk saya, tetapi perlusource ~/.bash_profile
sen sen
1
Anda akan mendapatkan kesalahan ini jika Anda tidak memeriksa wadah yang sedang berjalan, tetapi hanya sebuah gambar ... gambar tidak memiliki IPAddress ... pesan kesalahan yang mengerikan, ya
dagelf
37

Tampilkan semua alamat IP penampung:

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

Di Docker 1.3+, Anda juga dapat memeriksanya menggunakan:

Masukkan Docker yang berjalan (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

Untuk windows:

docker exec [container-id or container-name] ipconfig
Jake W
sumber
1
atau hanyadocker exec [container-name-or-id] ip a
Stephan Richter
untuk windowsdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz
27

Pada Docker versi 1.10.3, build 20f81dd

Kecuali Anda memberi tahu Docker sebaliknya, Docker selalu meluncurkan wadah Anda di jaringan jembatan. Jadi, Anda dapat mencoba perintah ini di bawah:

docker network inspect bridge

Yang kemudian akan mengembalikan bagian Wadah yang akan menampilkan alamat IP untuk wadah yang berjalan.

[
    {
        "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
sumber
apa artinya jika bagian kontainer Anda kosong? Namun wadah sudah berdiri dan berjalan.
StackEdd
24

Menjalankan:

docker ps -a

Ini akan menampilkan gambar buruh pelabuhan aktif:

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

Gunakan nilai ID KONTAINER:

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

"172.17.0.2"

gogasca
sumber
23

Berdasarkan beberapa jawaban yang saya sukai, saya memutuskan untuk menggabungkannya ke suatu fungsi untuk mendapatkan semua alamat IP dan lainnya untuk wadah tertentu. Mereka sekarang ada di .bashrcfile saya .

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

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

Perintah pertama memberikan alamat IP semua wadah dan yang kedua alamat IP wadah tertentu.

docker-ips
docker-ip YOUR_CONTAINER_ID
silgon
sumber
16

Referensi wadah dengan nama:

docker run ... --name pg-master

Kemudian ambil alamat alamat IP dengan nama:

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

Saya menulis skrip Bash berikut untuk mendapatkan tabel alamat IP dari semua kontainer yang berjalan di bawah 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
}

Anda harus mengubah jaringan variabel ke nama jaringan Anda sendiri.

Celup
sumber
1
Tuong Le menjawab dari sini stackoverflow.com/questions/17157721/… menghindari harus menentukan jaringan dalam dip (): buruh pelabuhan memeriksa --format '{{range .NetworkSettings.Networks}} {{. IPAddress}} {{end} } '"$ @"
JoanComasFdz
1
@ JoanComasFdz Anda menyelamatkan saya, terima kasih banyak!
Chagai Friedlander
14

Inilah jawaban cepat untuk bekerja:

Dapatkan nama atau ID wadah Anda:

docker container ls

Kemudian dapatkan IP:

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

Dapatkan port:

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

Docker ditulis dalam Go dan menggunakan sintaks Go untuk keperluan kueri juga.

Untuk memeriksa alamat IP wadah tertentu, Anda perlu menjalankan perintah ( -funtuk "format"):

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

Untuk ID atau nama kontainer, Anda dapat menjalankan perintah

docker container ls

yang akan mendaftar setiap wadah yang berjalan.

Rushal Verma
sumber
1
Ini sangat berguna. Di mana saya dapat menemukan dokumentasi untuk menulis kueri Go saya sendiri?
Michael Hoffmann
12

Berikut ini adalah solusi yang saya kembangkan hari ini di Python, menggunakan docker inspect containeroutput JSON sebagai sumber data.

Saya memiliki banyak wadah dan infrastruktur yang harus saya periksa, dan saya perlu mendapatkan informasi jaringan dasar dari wadah apa pun, dengan cepat dan cantik. . Itu sebabnya saya membuat skrip ini.

PENTING: Sejak versi 1.9, Docker memungkinkan Anda membuat beberapa jaringan dan melampirkannya ke wadah.

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

Outputnya adalah:

$ 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
sumber
Silakan, ubah ke python2.7 dalam sebuah skrip, python3 sekarang umum digunakan atau tulis dua versi
42n4
Saya akan memperbarui Gist saya dan segera setelah saya memilikinya, saya akan memposting di sini. Memang, pembungkus ini dirancang untuk Python 2.7. Terima kasih untuk umpan baliknya!
ivanleoncz
9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Hal di atas berfungsi jika wadah digunakan untuk jaringan jembatan default.

Namun, jika menggunakan jaringan jembatan khusus atau jaringan overlay, saya menemukan di bawah ini berfungsi lebih baik:

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

Untuk memperluas jawaban ko-dos, berikut ini adalah alias untuk mencantumkan semua nama wadah dan alamat IP mereka:

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
sumber
1
Itu bisa disederhanakan sedikit - gunakan docker ps -quntuk menghindari tail, dan --formatuntuk menghindari grep. Anda juga dapat mengirimkan beberapa ID kontainer docker inspectdaripada ke dalam lingkaran.
Bryan
1
docker ps -qhanya menampilkan ID numerik wadah, tapi saya pikir menggunakan nama mereka lebih baik. tailhanya untuk menyingkirkan baris pertama (header tabel) & masih diperlukan. Aku bisa menggunakan --format, meskipun: 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. Tapi itu tidak terlihat seperti peningkatan besar ... grepIMO lebih mudah dibaca.
Marco Roy
1
Versi sedikit diubah yang mendaftar IP pertama, dalam satu baris bersama dengan nama wadah: docker ps | tail -n +2 | saat membaca -aa; do name = $ {a [$ (($ {# a [@]} - 1))]}; buruh pelabuhan memeriksa $ name | grep "Alamat IP. * [0-9] \ +" | cut -d \ "-f 4 | tr" \ n "" "; echo -e" \ t $ {name} "; selesai
Gilead
Berakhir dengan:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
antogerva
9

Saya menggunakan cara sederhana ini

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

misalnya

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

Jika Anda menginstal Docker menggunakan Docker Toolbox, Anda dapat menggunakan aplikasi Kitematic untuk mendapatkan alamat IP kontainer:

  1. Pilih wadahnya
  2. Klik Pengaturan
  3. Klik di tab Ports.
Fernando Montoya
sumber
Bagi saya, alamat IP ada di tab "Hostname / ports", tetapi ini tetap merupakan jawaban yang sangat membantu! Catatan yang docker inspecttidak berfungsi saat Anda menjalankan kotak alat buruh pelabuhan. Ini akan melaporkan alamat IP, tetapi itu bukan alamat yang benar yang akan digunakan layanan Anda.
Göran Roseen
7

Untuk mendapatkan alamat IP dan port host dari sebuah wadah:

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

Keluaran:

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

CATATAN!!! untuk Penggunaan Menulis Docker:

Karena Docker Compose membuat jaringan terisolasi untuk setiap cluster, metode di bawah ini tidak berfungsi docker-compose.


Cara paling elegan dan mudah adalah mendefinisikan fungsi shell, yang saat ini menjadi jawaban terbanyak dari @ WouterD :

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

Docker dapat menulis ID kontainer ke file seperti program Linux:

Berlari dengan --cidfile=filename , Docker membuang ID wadah ke "nama file".

Lihat " Docker menjalankan Bagian yang setara dengan PID " untuk informasi lebih lanjut.

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

Menggunakan file PID:

  1. Menjalankan wadah dengan --cidfileparameter, app.cidkonten file seperti:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Anda dapat menggunakan konten file untuk memeriksa wadah Docker:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Anda bisa mengekstrak IP kontainer menggunakan skrip Python sebaris:

    $ 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
    

Ini bentuk yang lebih ramah manusia:

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

Lihat " 10 alternatif untuk mendapatkan alamat IP kontainer Docker " untuk informasi lebih lanjut.

guneysus
sumber
6

Untuk windows 10:

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

Ini akan mencantumkan semua IP kontainer pada host:

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

Docker memeriksa penggunaan untuk mencetak semua ips wadah dan namanya masing-masing

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

Hanya untuk kelengkapan:

Saya sangat suka --formatopsi itu, tetapi pada awalnya saya tidak menyadarinya sehingga saya menggunakan Python satu-liner sederhana untuk mendapatkan hasil yang sama:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'
sedi
sumber
Ini jawaban paling keren. Lihat juga jawaban lain - stackoverflow.com/a/36306632/432903
prayagupd
5

Menggabungkan jawaban sebelumnya dengan menemukan ID kontainer berdasarkan nama gambar Docker:

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

Menggunakan:

docker inspect $CID | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1
Alex Liffick
sumber
Ini adalah perintah baris tunggal aktual yang sebenarnya. Inilah yang saya dapatkan. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal
4

Untuk wadah Windows digunakan

docker exec <container> ipconfig

di mana <container>adalah nama atau id dari wadah.

Anda dapat menggunakan docker psuntuk menemukan id wadah.

kirodge
sumber
Ingatlah untuk menggunakan "—rm" atau jika tidak maka akan memakan ruang hard drive perlahan dengan lapisan yang tidak terhapus. Adalah baik untuk memasangkan "—rm" dengan "lari" di hampir semua kasus.
Contango
@Contango: 'docker exec' mengeksekusi perintah dalam wadah yang sudah berjalan. Itu tidak memiliki saklar --rm. docs.docker.com/engine/reference/commandline/exec
kirodge
4

Jika Anda lupa ID kontainer atau tidak ingin memanipulasi dengan perintah shell, lebih baik menggunakan UI seperti 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

Di sana Anda dapat menemukan semua informasi tentang wadah juga IP.

igor
sumber
4
Meskipun tautan ini dapat menjawab pertanyaan, hanya tautan jawaban yang tidak disarankan di Stack Overflow, Anda dapat meningkatkan jawaban ini dengan mengambil bagian-bagian penting dari tautan dan memasukkannya ke dalam jawaban Anda, ini memastikan jawaban Anda masih merupakan jawaban jika tautan diubah atau dihapus :)
WhatsThePoint