होस्ट से डॉकटर कंटेनर का आईपी पता कैसे प्राप्त करें


1407

क्या एक कमांड है जिसे मैं कंटेनर का आईपी पता प्राप्त करने के लिए होस्ट से चला सकता हूं एक नया कंटेनर बनने के बाद?

असल में, एक बार डॉकटर कंटेनर बनाने के बाद, मैं अपनी खुद की कोड तैनाती और कंटेनर कॉन्फ़िगरेशन स्क्रिप्ट रोल करना चाहता हूं।


28
मैं सिर्फ यह सुनिश्चित करना चाहता था कि अन्य नॉब मेरी गलती न करें और कंटेनर के बजाय छवि से आईपी प्राप्त करने का प्रयास करें। सुनिश्चित करें कि आप सीआईडी ​​या कंटेनर आईडी और क्वेरी प्राप्त करें; CID के माध्यम से 'docker ps' जो है।
पॉल ग्रेगोइरे

इसके विपरीत कैसे प्राप्त करें? होस्ट आईपी या कंटेनर से कॉल करें?
सोमनाथ मुलुक

जवाबों:


2323

बचाव का --formatविकल्प inspectआता है।

आधुनिक डॉकर क्लाइंट सिंटैक्स है:

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

पुराना डॉकर क्लाइंट सिंटैक्स है:

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

ये कमांड डॉकर कंटेनर के आईपी एड्रेस को वापस कर देंगे।

जैसा कि टिप्पणियों में उल्लेख किया गया है: यदि आप विंडोज पर हैं, तो घुंघराले ब्रेस के चारों ओर "एकल उद्धरण के बजाय दोहरे उद्धरण चिह्नों का उपयोग करें '


34
यह एक बहुत, बेहतर समाधान है। केवल तभी पूछें जो आपको चाहिए, यदि संभव हो तो!
मिकीबी

8
हम्म। <no value>अंजीर / Boot2Docker का उपयोग कर एक मैक पर प्रतिक्रिया प्राप्त करना
cevaris

2
@cevaris <no value>यदि आप इस कंटेनर को चलाने की कोशिश कर रहे हैं जो कि नहीं चल रहा है। सुनिश्चित करें कि ऐसा करने से पहले आपका कंटेनर चल रहा है।
TheJediCowboy

55
! चेतावनी! यह अब काम नहीं करता है। नया प्रारूप कंटेनर के लिए विशिष्ट है और फ़ॉर्म का अनुसरण करता है {{ .NetworkSettings.Networks.$network.IPAddress }}। डिफ़ॉल्ट पुल प्रतीत होता है, लेकिन डॉकटर-कम्पोज़ के तहत यह एक विशिष्ट नाम होगा जो आपके ऐप के नाम पर निर्भर करता है (मुझे लगता है कि --प्रोजेक्ट-नाम ध्वज से, हालांकि यह भी निर्भर करता है कि किस प्रकार का नेटवर्किंग डिस्क है आपने सेट किया है)। मैंने यहां एक उत्तर में एक पूर्ण उत्तर लिखा था stackoverflow.com/questions/17157721/…
डंक

5
शायद मैं एक नींद की भेड़ हूँ, लेकिन दोहरे उद्धरण चिह्नों के बारे में चेतावनी मेरे ध्यान को पकड़ने के लिए बोल्ड और ब्लिंक नहीं थी। शायद दो उदाहरण स्पष्ट रूप से लेबल किए गए लिनक्स और विंडोज प्रदान करते हैं। मैंने शाब्दिक रूप से केवल उदाहरण टाइप किया है, डॉक्स की जाँच की जो एकल उद्धरण का उपयोग करता है और फिर त्रुटि को गूगलेड करता है। मुझे यकीन है कि मैं अकेला नहीं हूँ।
व्यिक

513

आप उपयोग कर सकते हैं docker inspect <container id>

उदाहरण के लिए:

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

67
IP निकालने के लिए, आप कुछ ऐसा कर सकते हैं docker inspect $CID | grep IPAddress | cut -d '"' -f 4, यह ठीक काम करता है :)
creack

9
सभी को एक साथ लाते हुए, इस शेल उर्फ ​​को सभी कंटेनर आईडी और उनके ips को सूचीबद्ध करना चाहिए: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 द्वारा उल्लेख किया गया है, निरीक्षण करने के लिए एक नया विकल्प है। अब, आप के साथ Ip आसान कर सकते हैंdocker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}
creack

16
सिर्फ एक नोट। एकल डैश विकल्पों को हटा दिया जा रहा है जिससे कि -फॉर्मट --फॉर्मैट हो जाएगा।
जामटूर 01

7
docker inspect -format '{{ .NetworkSettings.IPAddress }}' ${CID}नया वाक्यविन्यास है। -formatपदावनत हो जाता है, बन जाता है --format
ईवी

408

सबसे पहले कंटेनर आईडी प्राप्त करें:

docker ps

(पहला कॉलम कंटेनर आईडी के लिए है)

चलाने के लिए कंटेनर ID का उपयोग करें:

docker inspect <container ID>

सबसे नीचे, "NetworkSettings" के तहत, आप "IPAddress" पा सकते हैं

या बस करो:

docker inspect <container id> | grep "IPAddress"

5
बहुत बुरा, मेरे एक उदाहरण पर (साथ शुरू docker run -it MYCONTAINER /bin/bash), आउटपुट का inspectकोई खंड नहीं है NetworkSettings!
एरिक

3
यह विंडोज 10 पर काम नहीं करता है। आपको बहुत ही आवश्यक है कि आप IPconfig के साथ DockerNAT के आईपी पते का पता लगाएं।
15

@ एरिक आप इसके लिए नेटवर्क ब्रिज का भी निरीक्षण कर सकते हैं:docker network inspect bridge | grep Gateway | grep -o -E '[0-9.]+'
टॉमाज़ कपालोस्की

5
मैं ... | grep IPआईपी ​​प्राप्त करने के लिए आवश्यक सभी स्वरूपण विवरणों के समाधान को बहुत पसंद करता हूं । +1
d8aninja

1
@ एरिक - आपने छवि के साथ कंटेनर को भ्रमित कर दिया है । कमांड वास्तव में है (जो कंटेनर नाम नहीं है ); यदि आप करते हैं तो आपको छवि के बारे में स्थिर जानकारी मिल जाएगी । आपको चल रहे कंटेनर का नाम खोजने की आवश्यकता है (या दूसरों के सुझाव के अनुसार इसकी आईडी का उपयोग करें)। मेरे सिस्टम पर, उस छवि से पहला ऐसा कंटेनर बनाया गया है जो नाम के लिए डिफॉल्ट करता है , इसलिए NetworkSettings है। docker run -it MYIMAGEdocker inspect MYIMAGEMYIMAGE_1docker inspect MYIMAGE_1
टूलमेकरसेव

214
docker inspect CONTAINER_ID | grep "IPAddress"

आप -iमामले को अनदेखा करने के लिए grep में जोड़ सकते हैं तब भी निम्नलिखित काम करेंगे:

docker inspect CONTAINER_ID | grep -i "IPaDDreSS"

5
यह उत्तर अन्य 22 से बेहतर / अलग कैसे है?
एसडीएस

यह निश्चित रूप से सबसे अच्छा जवाब नहीं है। WouterD का उत्तर वह उत्तर है जिसकी आप तलाश कर रहे हैं।
एम। वांडरली

7
@ M.Vanderlee इस उत्तर में एक कमांड है जो याद रखना आसान है, जो इसे एक बेहतर उत्तर आईएमओ बनाता है।
ह्युसेंट्रॉक्टव

1
@WouterHuysentruit ज़रूर, लेकिन आपको कई प्रविष्टियाँ और वास्तविक "IPAddress" पाठ मिलता है। आप आगे की हेरफेर के बिना स्क्रिप्ट में इसका उपयोग नहीं कर सकते।
एम। वेन्डलीली

आप सही हे। प्रश्न के संदर्भ में, अन्य उत्तर बेहतर है।
हुइसेन्ट्रक्टविले

133

केवल एक ही आदेश में सभी कंटेनर नाम और उनके आईपी पते प्राप्त करने के लिए।

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

यदि आप docker-composeकमांड का उपयोग कर रहे हैं तो यह होगा:

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

उत्पादन होगा:

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

5
मैं वास्तव में इसे पसंद करता हूं, लेकिन यह डॉकटर कंपोज के लिए भी काम नहीं करता है, अपने नेटवर्क के साथ कुछ करना है। बदले {{.NetworkSettings.IPAddress }}में{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}
क्लॉकवर्कजेक

यहाँ मैं उपयोग भिन्नता है docker inspect --format '{{ .NetworkSettings.IPAddress }}' $(docker ps -aq | xargs) | sed -e '/^$/d':। sed(1)हटा देगा कंटेनर वर्तमान के लिए खाली लाइनों, लेकिन एक आईपी पते नहीं होने चाहिए।
NYCeyes

97

इस शेल स्क्रिप्ट को अपनी ~/.bashrcया संबंधित फ़ाइल में जोड़ें :

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

फिर, एक कंटेनर का IP पता प्राप्त करने के लिए, बस यह करें:

docker-ip YOUR_CONTAINER_ID

डॉकर के नए संस्करण के लिए, कृपया निम्नलिखित का उपयोग करें:

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"
सयानचोदर

यह मेरे लिए काम करता है, लेकिन जरूरत हैsource ~/.bash_profile
पेनी चान

1
यदि आप एक रनिंग कंटेनर का निरीक्षण नहीं कर रहे हैं, तो आपको यह त्रुटि मिलेगी, लेकिन बस एक छवि ... एक छवि में IPAddress नहीं है ... भयानक त्रुटि संदेश, हाँ
9

37

सभी कंटेनर के IP पते दिखाएं:

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

37

डॉकर 1.3+ में, आप इसका उपयोग करके भी देख सकते हैं:

रनिंग डॉकर (लिनक्स) दर्ज करें:

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

विंडोज के लिए:

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

1
या बसdocker exec [container-name-or-id] ip a
स्टीफन रिक्टर

खिड़कियों के लिएdocker exec [container-id or container-name] ipconfig
GreatAndPowerfulOz

27

डॉकर संस्करण 1.10.3 के रूप में, 20f81dd का निर्माण करें

जब तक आपने डॉकर को अन्यथा नहीं बताया, डॉकर हमेशा आपके कंटेनर को ब्रिज नेटवर्क में लॉन्च करता है। तो आप इस आदेश को नीचे आज़मा सकते हैं:

docker network inspect bridge

जिसे तब एक कंटेनर अनुभाग वापस करना चाहिए जो उस चालू कंटेनर के लिए आईपी पता प्रदर्शित करेगा।

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

अगर आपके कंटेनर सेक्शन खाली है तो इसका क्या मतलब है? फिर भी कंटेनर ऊपर और चल रहा है।
स्टैकएड

24

निष्पादित:

docker ps -a

यह सक्रिय डॉकटर चित्र प्रदर्शित करेगा:

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

कंटेनर आईडी मूल्य का उपयोग करें:

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

"172.17.0.2"


23

मेरे द्वारा पसंद किए गए कुछ उत्तरों के आधार पर, मैंने सभी आईपी पते और एक विशिष्ट कंटेनर के लिए एक फ़ंक्शन प्राप्त करने के लिए उन्हें एक समारोह में विलय करने का निर्णय लिया। वे अब मेरी .bashrcफाइल में हैं।

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

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

पहला कमांड सभी कंटेनरों का आईपी पता देता है और दूसरा एक विशिष्ट कंटेनर का आईपी एड्रेस।

docker-ips
docker-ip YOUR_CONTAINER_ID

16

नाम से संदर्भ कंटेनर:

docker run ... --name pg-master

फिर नाम से IP पता पता पकड़ो:

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

15

के तहत चल रहे सभी कंटेनरों से आईपी पतों की एक तालिका प्राप्त करने के लिए मैंने निम्नलिखित बैश स्क्रिप्ट लिखी 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
}

आपको चर नेटवर्क को अपने नेटवर्क नाम में बदलना चाहिए।


1
यहां से टयोंग ले का जवाब stackoverflow.com/questions/17157721/… डिप में नेटवर्क निर्दिष्ट करने से बचता है (): docker निरीक्षण करता है --format '{range .NetworkSettings.Networks}}} {{। IPAddress}} {{end} } '' $ @ ''
JoanComasFdz

1
@JoanComasFdz आपने मुझे बहुत बहुत धन्यवाद बचाया!
चगाई फ्राइडलैंडर

14

यहाँ एक त्वरित जवाब है:

अपना कंटेनर नाम या आईडी प्राप्त करें:

docker container ls

फिर आईपी प्राप्त करें:

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

पोर्ट प्राप्त करें:

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

13

डॉकर को गो में लिखा गया है और यह क्वेरी उद्देश्यों के लिए गो सिंटैक्स का उपयोग करता है।

एक विशेष कंटेनर के आईपी पते का निरीक्षण करने के लिए, आपको कमांड चलाने की जरूरत है ( -f"प्रारूप" के लिए):

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

कंटेनर आईडी या नाम के लिए, आप कमांड चला सकते हैं

docker container ls

जो हर चलने वाले कंटेनर को सूचीबद्ध करेगा।


1
यह बहुत उपयोगी है। मुझे अपने स्वयं के Go क्वेरीज़ लिखने के लिए दस्तावेज़ कहाँ मिल सकते हैं?
माइकल हॉफमैन

12

यहां एक समाधान है जिसे मैंने आज पायथन में विकसित किया है, docker inspect containerडेटा स्रोत के रूप में JSON आउटपुट का उपयोग कर रहा है ।

मेरे पास बहुत सारे कंटेनर और इन्फ्रास्ट्रक्चर हैं जिनका मुझे निरीक्षण करना है, और मुझे किसी भी कंटेनर से, तेज और सुंदर तरीके से बुनियादी नेटवर्क जानकारी प्राप्त करने की आवश्यकता है। इसलिए मैंने यह स्क्रिप्ट बनाई है।

महत्वपूर्ण: संस्करण 1.9 के बाद से, डॉकर आपको कई नेटवर्क बनाने और कंटेनरों में संलग्न करने की अनुमति देता है।

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

आउटपुट है:

$ 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

कृपया, python2.7 को स्क्रिप्ट में बदलें, python3 अब आम उपयोग में है या दो संस्करण लिखें
42n4

मैं अपना Gist अपडेट करूंगा और जैसे ही मेरे पास होगा, मैं यहां पोस्ट करूंगा। दरअसल, इस रैपर को पायथन 2.7 के लिए डिजाइन किया गया था। प्रतिक्रिया के लिए धन्यवाद!
ivanleoncz

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

ऊपर काम करता है अगर कंटेनर डिफ़ॉल्ट पुल नेटवर्क पर तैनात है।

हालाँकि, यदि कस्टम ब्रिज नेटवर्क या ओवरले नेटवर्क का उपयोग किया जाता है, तो मुझे बेहतर काम करने के लिए नीचे मिला:

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

9

को-डॉस उत्तर का विस्तार करने के लिए, यहां सभी कंटेनर नामों और उनके आईपी पते को सूचीबद्ध करने के लिए एक उपनाम है:

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
यह काफी सरल किया जा सकता है - docker ps -qसे बचने के लिए tail, और टाल से बचने के लिए उपयोग करें --format। इसके अलावा आप docker inspectशेल में लूप के बजाय कई कंटेनर आईडी पास कर सकते हैं ।
ब्रायन

1
docker ps -qकेवल कंटेनरों की संख्यात्मक आईडी प्रदर्शित करता है, लेकिन मुझे लगता है कि उनके नाम का उपयोग करना बेहतर है। tailकेवल पहली पंक्ति (तालिका शीर्ष लेख) से छुटकारा पाने के लिए और अभी भी आवश्यक है। मैं उपयोग कर सकता हूं --format, हालांकि 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:। लेकिन यह एक बड़ा सुधार नहीं लगता है ... grepअधिक पठनीय IMO था।
मार्को रॉय

1
कंटेनर के नाम के साथ एक पंक्ति में सबसे पहले IP को सूचीबद्ध करने वाले थोड़ा परिवर्तित संस्करण: docker ps | tail -n +2 | पढ़ते समय -ए; do name = $ {a [$ (($ {# a [@]} - 1))}}; docker ने $ नाम का निरीक्षण किया | grep "IPAddress। * [0-9] \ +" | cut -d \ "-f 4 | tr" \ n ""; echo -e "\ t $ {name}"; किया
गिलियड

के साथ समाप्त हुआ:docker inspect $cid | grep IPAddress | cut -d '"' -f 4 | tail -n 1
20.05 बजे एंटीग्वेरा

9

मैं इस सरल तरीके का उपयोग करता हूं

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

जैसे

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

7

यदि आपने डॉकर टूलबॉक्स का उपयोग करके डॉकटर को स्थापित किया है, तो आप कंटेनर आईपी पते को प्राप्त करने के लिए किटीमैटिक एप्लिकेशन का उपयोग कर सकते हैं:

  1. कंटेनर का चयन करें
  2. सेटिंग्स पर क्लिक करें
  3. पोर्ट्स टैब में क्लिक करें।

मेरे लिए, आईपी पता "होस्टनाम / पोर्ट" टैब पर था, लेकिन फिर भी यह एक बहुत ही उपयोगी उत्तर था! ध्यान दें कि docker inspectजब आप डॉक टूलबॉक्स चलाते हैं तो यह काम नहीं करता है। यह एक आईपी पते की रिपोर्ट करेगा, लेकिन यह सही पता नहीं है कि आपकी सेवाओं का उपयोग क्या होगा।
गोरान रोज़ेन

7

कंटेनर का IP पता और होस्ट पोर्ट पाने के लिए:

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

आउटपुट:

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

7

ध्यान दें!!! डॉकर कम्पोज़ के उपयोग के लिए:

चूंकि डॉकर कम्पोज़ प्रत्येक क्लस्टर के लिए एक अलग नेटवर्क बनाता है, इसलिए नीचे दिए गए तरीके काम नहीं करते हैं docker-compose


सबसे सुरुचिपूर्ण और आसान तरीका एक शेल फ़ंक्शन को परिभाषित कर रहा है, वर्तमान में सबसे अधिक मतदान वाला उत्तर @ WouterD का :

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

डॉकटर कंटेनर आईडी को लिनक्स प्रोग्राम जैसी फ़ाइल में लिख सकता है:

साथ चल रहा है --cidfile=filename, डॉकटर ने कंटेनर का आईडी "फ़ाइलनाम" में डाल दिया।

अधिक जानकारी के लिए " डॉकर पीआईडी ​​समकक्ष अनुभाग चलाता है " देखें ।

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

PID फ़ाइल का उपयोग करना:

  1. --cidfileपैरामीटर के साथ कंटेनर चलाना , app.cidफ़ाइल सामग्री इस प्रकार है:

    a29ac3b9f8aebf66a1ba5989186bd620ea66f1740e9fe6524351e7ace139b909
    
  2. डॉकटर कंटेनरों का निरीक्षण करने के लिए आप फ़ाइल सामग्री का उपयोग कर सकते हैं:

    blog-v4 git:(develop) ✗ docker inspect `cat app.cid`
    
  3. आप इनलाइन पायथन लिपि का उपयोग करके कंटेनर IP निकाल सकते हैं:

    $ 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
    

यहाँ एक अधिक मानवीय अनुकूल रूप है:

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

अधिक जानकारी के लिए " डॉकर कंटेनर आईपी पते प्राप्त करने के 10 विकल्प " देखें ।



5

यह मेजबान पर सभी कंटेनर आईपी को सूचीबद्ध करेगा:

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

5

डॉकर सभी कंटेनर ips और इसके संबंधित नामों को प्रिंट करने के लिए उपयोग का निरीक्षण करता है

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

5

पूर्णता के लिए:

मुझे वास्तव में --formatविकल्प पसंद है , लेकिन पहले मुझे इसके बारे में पता नहीं था इसलिए मैंने समान पाने के लिए एक साधारण पायथन वन-लाइनर का उपयोग किया:

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

यह सबसे अच्छा जवाब है। एक अन्य उत्तर भी देखें - stackoverflow.com/a/36306632/432903
प्रयागपाद

5

डॉकटर छवि नाम के आधार पर कंटेनर आईडी खोजने के साथ पिछले उत्तरों को मिलाकर:

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

4

उपयोग:

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

यह वास्तविक सिंगल लाइन उचित कमांड है। यहाँ मुझे क्या मिला है $ docker inspect c4591485328d | grep IPAddress | grep -v null| cut -d '"' -f 4 | head -1 172.17.0.2
जयंत भावल

4

के लिए विंडोज कंटेनर उपयोग

docker exec <container> ipconfig

कंटेनर का नाम या आईडी कहां <container>है ।

आप docker psकंटेनर की आईडी खोजने के लिए उपयोग कर सकते हैं ।


"-Rm" का उपयोग करना याद रखें या फिर यह धीरे-धीरे हार्ड ड्राइव स्पेस को अनलेटेड लेयर्स के साथ खाएगा। लगभग सभी मामलों में “रन” के साथ जोड़ी बनाना अच्छा है।
कंटैंगो

@ कांटांगो: 'डूकर एग्जीक्यूटिव' पहले से चल रहे कंटेनर में एक कमांड निष्पादित करता है। इसमें --rm स्विच नहीं है। docs.docker.com/engine/reference/commandline/exec
kirodge

4

यदि आप कंटेनर आईडी भूल गए हैं या शेल कमांड के साथ हेरफेर नहीं करना चाहते हैं, तो पोर्टेनेर की तरह यूआई का उपयोग करना बेहतर है।

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

वहां आप कंटेनर के बारे में सभी जानकारी भी पा सकते हैं आईपी।


4
हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, केवल स्टैक ओवरफ्लो पर लिंक को हतोत्साहित किया जाता है, आप लिंक के महत्वपूर्ण भागों को ले जाकर इस उत्तर को बेहतर बना सकते हैं और इसे अपने उत्तर में डाल सकते हैं, यह सुनिश्चित करता है कि यदि लिंक बदल गया तो आपका उत्तर अभी भी एक उत्तर है। या हटा दिया गया :)
व्हाट्सएप ग्रुप
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.