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.


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.


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

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"

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"

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

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

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)

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

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

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"


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

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)

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.


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'

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.


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

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

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'

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

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.

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

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.


6

Untuk windows 10:

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

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

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

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

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

4

Menggunakan:

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

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.


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.


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.