Ana bilgisayardan Docker kapsayıcısının IP adresi nasıl alınır?


1409

Yeni bir kap oluşturulduktan sonra kabın IP adresini doğrudan ana bilgisayardan almak için çalıştırabileceğim bir komut var mı?

Temel olarak, Docker kapsayıcı oluşturduktan sonra, kendi kod dağıtımımı ve kapsayıcı yapılandırma komut dosyalarını almak istiyorum.


28
Ben sadece diğer noobs benim hata yapmaz emin olmak ve konteyner yerine görüntüden IP almaya çalışmak istedim. CID veya kapsayıcı kimliğini aldığınızdan ve sorguladığınızdan emin olun; CID üzerinden 'docker ps' yani.
Paul Gregoire

Tam tersi nasıl yapılır? IP mi barındırıyorsunuz yoksa kapsayıcıdan mı arama yapıyorsunuz?
Somnath Muluk

Yanıtlar:


2328

--formatSeçeneği inspectkurtarmaya gelir.

Modern Docker istemci sözdizimi:

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

Old Docker istemci sözdizimi:

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

Bu komutlar Docker kapsayıcısının IP adresini döndürür.

Yorumlarda belirtildiği gibi: Windows'daysanız, süslü parantezlerin etrafında "tek tırnak yerine çift ​​tırnak kullanın '.


34
Bu çok daha iyi bir çözümdür. Mümkünse sadece ihtiyacınız olanı isteyin!
MikeyB

8
Hmm. Bir Alma <no value>Şekil / Boot2Docker kullanarak Mac'te tepkisini
cevaris

2
@cevaris Bunu, <no value>çalışmayan bir kaba karşı çalıştırmayı denerseniz alacaksınız . Bunu yapmadan önce konteynerinizin çalıştığından emin olun.
TheJediCowboy

55
!UYARI! Bu artık işe yaramıyor. Yeni biçim kapsayıcıya özgüdür ve formu izler {{ .NetworkSettings.Networks.$network.IPAddress }}. Varsayılan köprü gibi görünüyor, ancak docker-compose altında bu uygulamanızın adına bağlı belirli bir ad olacaktır (--project-name bayrağından düşünüyorum, ancak bu da ne tür bir ağ yapılandırmasına bağlı olacak ayarladınız). Burada tam bir cevap yazdım stackoverflow.com/questions/17157721/…
Dunk

5
Belki uykulu bir koyuyum, ama çift tırnak hakkındaki uyarı dikkatimi çekecek kadar cesur ve gösterişli değildi. Belki açıkça Linux ve Windows olarak etiketlenmiş iki örnek veriniz. Kelimenin tam anlamıyla sadece yazdım, aynı zamanda tek tırnak kullanılan belgeleri kontrol ettim ve sonra hatayı Googled. Eminim yalnız değilim.
Wyck

513

Kullanabilirsiniz docker inspect <container id>.

Örneğin:

CID=$(docker run -d -p 4321 base nc -lk 4321);
docker inspect $CID

67
Ip ayıklamak için, böyle bir şey yapabilirsiniz docker inspect $CID | grep IPAddress | cut -d '"' -f 4, iyi çalışıyor :)
creack

9
Hepsini bir araya getiren bu kabuk takma adı, tüm kapsayıcı kimliklerini ve ips'lerini listelemelidir: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
@ User3119830 tarafından belirtildiği gibi incelemek için yeni bir seçenek var. Şimdi, Ip ile daha kolay alabilirsinizdocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack

16
Sadece bir not. Tek çizgi seçenekleri kullanımdan kaldırılıyor, böylece -format - format olacak.
jamtur01

7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}yeni sözdizimidir. -formatkullanımdan kaldırılırsa, olur --format.
Devy

408

İlk olarak kapsayıcı kimliğini alın:

docker ps

(İlk sütun kapsayıcı kimliği içindir)

Çalıştırmak için kapsayıcı kimliğini kullanın:

docker inspect <container ID>

Altta, "AğAyarları" altında, "IPAdresi" ni bulabilirsiniz.

Veya sadece yapın:

docker inspect <container id> | grep "IPAddress"

5
Çok kötü, benim durumlarımdan birinde (ile başladı docker run -it MYCONTAINER /bin/bash), çıktı inspectbölüm yok NetworkSettings!
Eric

3
Bu, Windows 10'da çalışmaz. Ayrıca ipconfig ile DockerNAT'ın ip adresini de bulmanız gerekir.
ntiedt

@Eric Bunun için ağ köprüsünü de inceleyebilirsiniz:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
Tomasz Kapłoński

5
... | grep IPIP almak için gereken tüm biçimlendirme ayrıntılarına çözümü büyük ölçüde tercih ederim . +1
d8aninja

1
@Eric - sen karıştı ettik kabı ile resmin . Komut aslında docker run -it MYIMAGE(bir kapsayıcı adı değil ); yaparsanız görüntüdocker inspect MYIMAGE hakkında statik bilgi alırsınız . Çalışan kabın adını bulmanız gerekir (veya başkalarının önerdiği şekilde kimliğini kullanmanız gerekir). Sistemimde, bu görüntüden oluşturulan ilk konteyner varsayılan olarak isimlendirilir , NetworkSettings de öyle . MYIMAGE_1docker inspect MYIMAGE_1
ToolmakerSteve

216
docker inspect CONTAINER_ID | grep "IPAddress"

-iDavayı görmezden gelmek için grep'e ekleyebilirsiniz , o zaman aşağıdakiler bile işe yarar:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

5
bu cevap diğer 22'den nasıl daha iyi / farklı?
sds

Bu kesinlikle en iyi cevap değil. WouterD'nin cevabı aradığınız cevaptır.
M.Vanderlee

7
@ M.Vanderlee bu cevabın hatırlanması daha kolay bir komutu var, bu da IMO'ya daha iyi bir cevap veriyor.
huysentruitw

1
@WouterHuysentruit Elbette, ancak birden fazla giriş ve gerçek "IPAdresi" metnini alırsınız. Daha fazla manipülasyon olmadan bir komut dosyasında kullanamazsınız.
M.Vanderlee

Haklısın. Soru bağlamında, diğer cevap daha iyi uyuyor.
huysentruitw

133

Tüm kapsayıcı adlarını ve IP adreslerini tek bir komutta almak için.

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

Eğer docker-composekomutu kullanıyorsanız şu şekilde olacaktır:

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

Çıktı şöyle olacaktır:

/containerA - 172.17.0.4
/containerB - 172.17.0.3
/containerC - 172.17.0.2

5
Bunu gerçekten beğendim ama Docker Compose için de çalışmıyor, kendi ağlarına sahip olmakla ilgili bir şey. Bunun yerine değiştirmek {{.NetworkSettings.IPAddress }}için{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
clockworkgeek

İşte varyasyon Ben yaramaz: docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d'. sed(1)Kaldırır boş kaplar mevcut çizgileri, bir İP adresi olmamasından.
NYCeyes

97

Bu kabuk komut ~/.bashrcdosyasını veya ilgili dosyanıza ekleyin :

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

Ardından, bir kapsayıcının IP adresini almak için şunu yapın:

docker-ip YOUR_CONTAINER_ID

Docker'ın yeni sürümü için lütfen aşağıdakileri kullanın:

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

bu benim için çalışıyor, ama gerekirsource ~/.bash_profile
penny chan

1
Çalışan bir kapsayıcıyı denetlemiyorsanız bu hatayı alırsınız, ancak sadece bir görüntü ... bir görüntünün IPAdresi yok ... korkunç bir hata mesajı var, evet
dagelf

37

Tüm kabın IP adreslerini göster:

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

37

Docker 1.3+ sürümünde şunları kullanarak da kontrol edebilirsiniz:

Çalışan Docker'a (Linux) girin:

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

Pencereler için:

docker exec [container-id or container-name] ipconfig

1
ya da sadecedocker exec [container-name-or-id] ip a
Stephan Richter

Windows içindocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz

27

Docker sürüm 1.10.3'ten itibaren, 20f81dd derlemesi

Docker'a aksi söylemediyseniz, Docker konteynırlarınızı her zaman köprü ağında başlatır. Böylece aşağıdaki komutu deneyebilirsiniz:

docker network inspect bridge

Bu daha sonra çalışan kapsayıcı için IP adresini görüntüleyecek bir Kapsayıcılar bölümü döndürmelidir.

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

kapsayıcı bölümünüz boşsa ne anlama gelir? Yine de konteyner çalışıyor.
StackEdd

24

Yürütme:

docker ps -a

Bu, aktif liman işçisi görüntülerini görüntüler:

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

CONTAINER ID değerini kullanın:

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

"172.17.0.2"


23

Sevdiğim bazı cevaplara dayanarak, tüm IP adreslerini almak için bir işlevle ve belirli bir kapsayıcı için başka bir işlevle birleştirmeye karar verdim. Onlar şimdi benim .bashrcdosyamda.

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

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

İlk komut, tüm kapsayıcıların IP adreslerini, ikincisi ise belirli bir kabın IP adresini verir.

docker-ips
docker-ip YOUR_CONTAINER_ID

16

İsme göre referans kapsayıcılar:

docker run ... --name pg-master

Ardından IP adresi adresini ada göre alın:

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

15

Altında çalışan tüm kapsayıcılardan IP adresleri tablosu almak için aşağıdaki Bash komut dosyasını yazdım 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
}

Değişken ağı kendi ağ adınızla değiştirmeniz gerekir.


1
Buradan Tuong Le cevap stackoverflow.com/questions/17157721/... kaçınır () dip ağı belirtmek zorunda: liman işçisi '--format incelemek {{aralık .NetworkSettings.Networks}} {. {Ip adresi}} {{sonu} } '"$ @"
JoanComasFdz

1
@JoanComasFdz beni kurtardın çok teşekkürler!
Chagai Friedlander

14

İşte hızlı çalışan bir cevap:

Kapsayıcı adınızı veya kimliğinizi alın:

docker container ls

Sonra IP'yi alın:

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

Bağlantı noktasını alın:

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

13

Docker Go'da yazılmıştır ve sorgu amacıyla da Go sözdizimini kullanır.

Belirli bir kapsayıcının IP adresini incelemek için, komutu çalıştırmanız gerekir ( -f"biçim" için):

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

Kapsayıcı kimliği veya adı için komutu çalıştırabilirsiniz

docker container ls

çalışan her kabı listeleyecektir.


1
Bu çok faydalı. Kendi Go sorgularımı yazmak için belgeleri nereden bulabilirim?
Michael Hoffmann

12

İşte bugün Python'da geliştirdiğim bir çözüm, docker inspect container veri kaynağı olarak JSON çıktısını .

İncelemem gereken çok sayıda kapsayıcı ve altyapım var ve herhangi bir kaptan hızlı ve güzel bir şekilde temel ağ bilgilerini almam gerekiyor şekilde . Bu yüzden bu senaryoyu hazırladım.

ÖNEMLİ: 1.9 sürümünden beri, Docker birden fazla ağ oluşturmanıza ve bunları kaplara eklemenize izin verir.

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

Çıktı:

$ 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

Lütfen, bir komut dosyasında python2.7 olarak değiştirin, python3 artık ortak kullanımdadır veya iki sürüm yazınız
42n4

Gist'imi güncelleyeceğim ve en kısa sürede buraya göndereceğim. Gerçekten, bu sarıcı Python 2.7 için tasarlanmıştır. Geri dönüşünüz için teşekkür ederiz!
ivanleoncz

9
docker inspect --format '{{ .NetworkSettings.IPAddress }}' <containername or containerID here>

Kapsayıcı varsayılan köprü ağına konuşlandırılmışsa yukarıdakiler çalışır.

Ancak, özel bir köprü ağı veya yer paylaşımı ağı kullanıyorsanız, daha iyi çalışmak için aşağıdakileri buldum:

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

9

Ko-dos 'yanıtını genişletmek için, tüm kapsayıcı adlarını ve IP adreslerini listeleyen bir takma ad:

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
Kullanımı - Bu biraz basitleştirilmiş olabilir docker ps -qönlemek için tail, ve --formatgrep önlemek için. Ayrıca docker inspect, kabukta döngü yerine birden çok kapsayıcı kimliği geçirebilirsiniz .
Bryan

1
docker ps -qyalnızca kapsayıcıların sayısal kimliklerini görüntüler, ancak adlarını kullanmanın daha iyi olduğunu düşünüyorum. tailsadece ilk satırdan kurtulmaktır (tablo başlığı) ve hala gereklidir. Kullanabileceğim --formatolsa: 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. Ama bu büyük bir gelişme gibi görünmüyor ... grepdaha okunabilir IMO'ydu.
Marco Roy

1
Kapsayıcı adıyla birlikte bir satırda önce IP'leri listeleyen biraz değiştirilmiş sürüm: docker ps | kuyruk -n +2 | okunurken -aa; do name = $ {a [$ (($ {# a [@]} - 1))]}; docker $ name incelemek | grep "IPAdresi. * [0-9] \ +" | cut -d \ "-f 4 | tr" \ n "" "; echo -e" \ t $ {name} "; bitti
Gilead

docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
Şununla

9

Bu basit yolu kullanıyorum

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

Örneğin

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

7

Docker'ı Docker Toolbox kullanarak yüklediyseniz, kapsayıcı IP adresini almak için Kitematic uygulamasını kullanabilirsiniz:

  1. Kapsayıcıyı seçin
  2. Ayarlar'ı tıklayın
  3. Bağlantı Noktaları sekmesine tıklayın.

Benim için IP adresi "Ana bilgisayar adı / bağlantı noktaları" sekmesindeydi, ancak yine de bu çok yardımcı bir yanıttı! docker inspectDocker araç kutusunu çalıştırdığınızda işe yaramadığını unutmayın . Bir IP adresi rapor edecektir, ancak hizmetlerinizin kullanacağı doğru adres değildir.
Göran Roseen

7

Bir kabın IP adresini ve ana makine bağlantı noktasını almak için:

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

Çıktı:

    "HostPort": "4200"
                    "HostPort": "4200"
        "SecondaryIPAddresses": null,
        "IPAddress": "172.17.0.2",
                "IPAddress": "172.17.0.2",

7

NOT!!! Docker Compose Kullanımı için:

Docker Compose her küme için yalıtılmış bir ağ oluşturduğundan, aşağıdaki yöntemler işe yaramaz docker-compose.


En şık ve kolay yol, şu anda en çok oy alan cevap olan WouterD'nin kabuk işlevini tanımlamaktır :

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

Docker, Linux programları gibi bir dosyaya kapsayıcı kimlikleri yazabilir:

İle çalışan --cidfile=filenameDocker çalışırken, kapsayıcı kimliğini "dosya adına" atar.

Daha fazla bilgi için bkz. " Docker, PID'ye eşdeğer bir Bölüm çalıştırıyor ".

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

PID dosyası kullanma:

  1. Kapsayıcı --cidfileparametresiyle çalıştırıldığında , app.ciddosya içeriği şöyle:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. Docker kapsayıcılarını incelemek için dosya içeriğini kullanabilirsiniz:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. Kapsayıcı IP'sini bir satır içi Python betiği kullanarak ayıklayabilirsiniz:

    $ 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
    

İşte daha insan dostu bir form:

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

Daha fazla bilgi için bkz. " Docker kapsayıcı IP adreslerini almanın 10 alternatifi ".


6

Windows 10 için:

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

5

Bu, ana bilgisayardaki tüm kapsayıcı IP'lerini listeler:

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

5

Docker, tüm konteyner ips'lerini ve ilgili adlarını yazdırmak için kullanımını denetler

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

5

Sadece bütünlük için:

--formatSeçeneği gerçekten seviyorum , ama ilk başta bunun farkında değildim, bu yüzden aynı sonucu elde etmek için basit bir Python tek astar kullandım:

docker inspect <CONTAINER> |python -c 'import json,sys;obj=json.load(sys.stdin);print obj[0]["NetworkSettings"]["IPAddress"]'

Bu en havalı cevap. Ayrıca başka bir cevaba bakınız - stackoverflow.com/a/36306632/432903
prayagupd

5

Önceki yanıtları Docker görüntü adına göre kapsayıcı kimliğini bulmakla birleştirmek:

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

4

kullanın:

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

Bu gerçek tek satırlık uygun komuttur. İşte sahip olduğum şey. $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
Jayant Bhawal

4

İçin , Windows konteynerler kullanıma

docker exec <container> ipconfig

nerede <container>olduğu ad veya id kabın.

docker psKapsayıcı kimliğini bulmak için kullanabilirsiniz .


“—Rm” kullanmayı unutmayın, aksi takdirde silinmemiş katmanlarla yavaşça sabit sürücü alanı kaplar. Hemen hemen tüm durumlarda “rm” yi “run” ile eşleştirmek iyidir.
Contango

@Contango: 'docker exec' zaten çalışan bir kapta bir komut yürütür. --Rm anahtarı yok. docs.docker.com/engine/reference/commandline/exec
kirodge

4

Kapsayıcı kimliğini unuttuysanız veya kabuk komutlarıyla işlem yapmak istemiyorsanız, Portainer gibi kullanıcı arayüzünü kullanmak daha iyidir.

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

Orada konteyner hakkında tüm bilgileri IP de bulabilirsiniz.


4
Bu bağlantı soruyu cevaplayabilse de, yalnızca Yığın Taşması'nda bağlantı yanıtları önerilmemektedir, bağlantının önemli kısımlarını alıp cevabınıza koyarak bu cevabı geliştirebilirsiniz, bu bağlantı değiştiğinde cevabınızın hala bir cevap olmasını sağlar veya kaldırıldı :)
WhatsThePoint
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.