मैक के लिए डॉकर बीटा का उपयोग करके मेरे कंटेनर का आईपी नंबर क्या है?


28

इससे पहले मैं डॉकर टूलकिट का उपयोग कर रहा था और docker-machine inspect <machine-name>डॉकटर मशीन का आईपी खोजने के लिए उपयोग कर सकता था , ताकि कंटेनर द्वारा भीतर दिए जा रहे पृष्ठों को देख सके।

मैं docker बीटा क्लाइंट के लिए अपग्रेड किया गया है (Mac के लिए) और यह नहीं पा सकता कि पृष्ठ कहाँ परोसे जा रहे हैं।

मुझे लगता है क्योंकि यह डॉकटर शुद्ध है और डॉकटर-मशीन नहीं है, मैं स्थानीयहोस्ट पर उजागर बंदरगाहों को देखूंगा। लेकिन वे खुले नहीं हैं। यहां तक ​​कि किटमैटिक के माध्यम से मैं उजागर पोर्ट (80) के माध्यम से नेविगेट करता हूं, लेकिन कुछ भी नहीं देखता हूं।

$ docker inspect tiny_cori | jq '.[].HostConfig.PortBindings'
{
  "80/tcp": [
    {
      "HostIp": "",
      "HostPort": "80"
    }
  ]
}

$ docker inspect tiny_cori | jq '.[].NetworkSettings.IPAddress'
"172.17.0.2"

$ curl 172.17.0.2:80/status
^C

$ docker exec -t -i tiny_cori /bin/bash

root@f1c303f60a15:/# curl localhost:80/status
{"status":"OK"}

root@f1c303f60a15:/# ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: sit0@NONE: <NOARP> mtu 1480 qdisc noop state DOWN group default qlen 1
    link/sit 0.0.0.0 brd 0.0.0.0
3: ip6tnl0@NONE: <NOARP> mtu 1452 qdisc noop state DOWN group default qlen 1
    link/tunnel6 :: brd ::
4: ip6gre0@NONE: <NOARP> mtu 1448 qdisc noop state DOWN group default qlen 1
    link/gre6 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 brd 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00
26: eth0@if27: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
    link/ether 02:42:ac:11:00:02 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.2/16 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::42:acff:fe11:2/64 scope link
       valid_lft forever preferred_lft forever

क्या 172.17.0.2 वास्तव में मेरे कंटेनर का आईपी है? यदि नहीं, तो मुझे कहां मिल सकता है आईपी क्या है? या मुझे पोर्ट मैपिंग की समस्या है?

जवाबों:


25

आप कंटेनर के अंदर IP पते को देख रहे हैं जो 172.17.0.2 है और केवल docker कंटेनर (और उनके बीच) में "अंदर" मौजूद है।

जिस IP पते से आप जुड़ना चाहते हैं, वह आपकी होस्ट मशीन IP एड्रेस है। अपने मैक पर एक ifconfig करें और सही (आमतौर पर 192.168.xy या 10.xyz) खोजें। लोकलहोस्ट को कंटेनर के बाहर से भी काम करना चाहिए।


5
यकीन नहीं होता कि किसने इसे नकारा है लेकिन यह वास्तव में सही जवाब है। मैक के लिए डॉकर के साथ, एक अलग मशीन आईपी पते के साथ एक मध्यस्थ वीएम नहीं रह गया है। होस्ट को हिट करना (या तो आईपी या लोकलहोस्ट के माध्यम से) कंटेनर को अनुरोधों को अग्रेषित करना चाहिए जब तक कि पोर्ट सही ढंग से मैप न हो जाएं।
DNJohnson

धन्यवाद। मैं असमंजस में था कि ऐसा क्यों किया गया (दो बार)। हो सकता है क्योंकि यह सिर्फ वास्तविक जवाब होना बहुत आसान लगता है।
मिकेल कजूर

मैंने इसे कम नहीं किया। लेकिन मुझे संदेह है कि उपयोगकर्ताओं का एक सबसेट है, जो भी कारण से, यह सीधा जवाब काम नहीं करता है (या नहीं)। मैं सही के रूप में चिह्नित कर रहा हूं।
Synesso

2
खैर एक दिलचस्प बात है - ओएस एक्स पर जब मैं स्क्रीन कमांड के माध्यम से अपने xHyve वीएम पर जाता हूं और कर्ल लोकलहोस्ट चलाता हूं : 8080 - मुझे कंटेनरों में से एक से प्रतिक्रिया मिलती है। लेकिन अगर मैं ओएस एक्स टर्मिनल में ऐसा ही करता हूं - कनेक्शन ने इनकार कर दिया। ये केसे हो सकता हे?
mvmn

1
PS यह डॉकटर-कम्पोज़ के माध्यम से बनाए गए कंटेनर के साथ हुआ।
mvmn

8

निम्नलिखित कमांड टाइप करें और आपको अपना डॉकटर कंटेनर आईपी मिलेगा

$docker inspect <docker-container-name>

नीचे स्क्रॉल करें और आपको " NetworkSettings " के तहत आईपी-पता मिलेगा


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

ठीक है, लेकिन आप इसे पिंग नहीं कर सकते। मुझे संदेह है कि यही कारण है कि उपरोक्त सही उत्तर नीचे दिया गया है। यह सवाल मैं छोड़ गया हूं कि क्या वर्चुअल होस्ट पर नेटवर्क को ब्रिज करने का कोई तरीका है। वर्चुअल होस्ट अभी भी वहाँ है अगर मैकओएस में बेहतर एकीकृत किया गया है, और मुझे यकीन है कि आप इन आईपी पते को वहां से पिंग कर सकते हैं, लेकिन क्या मैं उस नेटवर्क पर पुल नहीं कर सकता हूं ताकि वे मैक पर स्थानीय रूप से उपलब्ध हों?
गेरी ग्लीसन

6

मैक के लिए डॉकर आईपी एड्रेस 127.0.0.1 पर चलता है


यह पूरी तरह से एक गलत बयान नहीं है: पी
जोनास

वास्तव में, यह सबसे सीधा जवाब था जिसने मेरी समस्या को हल किया।
जेम्स

1

आउटपुट में IP पते का स्पष्ट रूप से उल्लेख किया गया है docker ps

$ docker ps
CONTAINER ID        ... PORTS
c785a183b376        ... 0.0.0.0:80->80/tcp, 443/tcp

$ curl 0.0.0.0:80/status
{"STATUS":"OK"}

इसके अलावा, के localhostरूप में ही नहीं है0.0.0.0


5
0.0.0.0 का मतलब वर्तमान मशीन पर सभी आईपी पते हैं और आमतौर पर इसका उपयोग तब किया जाता है जब सुनते हैं, कनेक्ट नहीं होते हैं। मुझे समझ नहीं आता कि उपरोक्त कर्ल कैसे काम करेगा।
मिकेल Kj Mayr

2
0.0.0.0 आईपी पता है कि सेवा कंटेनर में बंधी है, और इसका मतलब यह है कि मेजबान इसे चलाने के संदर्भ में कुछ भी नहीं करता है। PORTS कॉलम के तहत आउटपुट कह रहा है कि कंटेनर का पोर्ट 80 (0.0.0.0:80) को पोर्ट 80 स्थानीय रूप से (80 / tcp), साथ ही साथ पोर्ट 443 को स्थानीय रूप से मैप किया जाता है।
केविन

1
नहीं, यह समान नहीं है, लेकिन जैसा कि बताया गया है, 0.0.0.0 एक आईपी पता नहीं है, यह सुनने के लिए एक संकेत है कि मैं स्थानीयहोस्ट सहित सभी को चाहता हूं। कनेक्ट करने के संदर्भ में वे समान हैं जब तक कि सेवा एक विशिष्ट आईपी (लोकलहोस्ट या बाहरी आईपी) के लिए बाध्य न हो।
गेरी ग्लीसन

0

मेरा मानना ​​है कि 127.0.0.1 लोकलहोस्ट के लिए है।

अपने मैक पर चल रहा है कि docker आईडी प्राप्त करने के लिए। टर्मिनल में "ifconfig" को चलाएं और 127.0.0.1 के अलावा परिणाम में भी होगा

ज्यादातर 192.168.xy की तरह

आशा करता हूँ की ये काम करेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.