2015-09-15 9 views
8

मैं डॉकर के साथ शुरू करने की कोशिश कर रहा हूं और Ubiquiti video controller चलाने के लिए चाहता हूं। मैंने डॉकर टूलबॉक्स स्थापित किया है और कंटेनर को अपने योसाइट होस्ट पर चलाने में कामयाब रहा है और docker-machine ip default द्वारा आईपी पर जाकर उसी मैक पर इसे एक्सेस कर सकता है। लेकिन मैं इसे नेटवर्क पर अन्य मशीनों पर एक्सेस करना चाहता हूं और अंततः अपने घर राउटर पर बंदरगाह अग्रेषण स्थापित करना चाहता हूं ताकि मैं इसे अपने घर नेटवर्क के बाहर एक्सेस कर सकूं।किसी अन्य होस्ट से MacOSX पर चल रहे डॉकर कंटेनर तक कैसे पहुंचे?

वर्चुअलबॉक्स जीयूआई का उपयोग करते हुए boot2docker issue 160 में सुझाए गए अनुसार, मैं एक ब्रिज नेटवर्क एडाप्टर जोड़ने में सक्षम था, लेकिन वीएम docker-machine को पुनरारंभ करने के बाद वीएम से कनेक्ट नहीं हो सकता है। docker env default लंबे समय तक लटकता है लेकिन अंततः Maximum number of retries (60) exceeded संदेश के साथ कुछ पर्यावरण चर लौटाता है। जब मैं उन चर के साथ खोल सेट करता हूं और docker ps चलाने की कोशिश करता हूं तो मुझे त्रुटि मिलती है: An error occurred trying to connect: Get https://10.0.2.15:2376/v1.20/containers/json: dial tcp 10.0.2.15:2376: network is unreachable

मुझे संदेह है कि डॉकर-मशीन में वीएम में नेटवर्किंग कॉन्फ़िगरेशन के बारे में कुछ धारणाएं हैं और मैं उन्हें मक्का कर रहा हूं।

docker-machine ssh ifconfig -a रिटर्न निम्नलिखित:

docker0 Link encap:Ethernet HWaddr 02:42:86:44:17:1E 
      inet addr:172.17.42.1 Bcast:0.0.0.0 Mask:255.255.0.0 
      UP BROADCAST MULTICAST MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

dummy0 Link encap:Ethernet HWaddr 96:9F:AA:B8:BB:46 
      BROADCAST NOARP MTU:1500 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

eth0  Link encap:Ethernet HWaddr 08:00:27:37:2C:75 
      inet addr:192.168.1.142 Bcast:192.168.1.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fe37:2c75/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:2996 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:76 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:278781 (272.2 KiB) TX bytes:6824 (6.6 KiB) 
      Interrupt:17 Base address:0xd060 

eth1  Link encap:Ethernet HWaddr 08:00:27:E8:38:7C 
      inet addr:10.0.2.15 Bcast:10.0.2.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fee8:387c/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:767 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:495 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:122291 (119.4 KiB) TX bytes:116118 (113.3 KiB) 

eth2  Link encap:Ethernet HWaddr 08:00:27:A4:CF:12 
      inet addr:192.168.99.100 Bcast:192.168.99.255 Mask:255.255.255.0 
      inet6 addr: fe80::a00:27ff:fea4:cf12/64 Scope:Link 
      UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 
      RX packets:430 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:322 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:1000 
      RX bytes:53351 (52.1 KiB) TX bytes:24000 (23.4 KiB) 

lo  Link encap:Local Loopback 
      inet addr:127.0.0.1 Mask:255.0.0.0 
      inet6 addr: ::1/128 Scope:Host 
      UP LOOPBACK RUNNING MTU:65536 Metric:1 
      RX packets:0 errors:0 dropped:0 overruns:0 frame:0 
      TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 
      collisions:0 txqueuelen:0 
      RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) 

eth0 मेरी रूटर से एक उचित डीएचसीपी पता हो रही है लगता है।

मुझे यकीन नहीं है कि यह सही दृष्टिकोण है या मैं गलत पेड़ को भड़क रहा हूं या नहीं। अगर मैं वीएम पर काम कर रहे ब्रिज नेटवर्क एडेप्टर प्राप्त कर सकता हूं, तो मुझे नहीं पता कि इसका उपयोग करने के लिए मेरे डॉकर कंटेनर को कैसे मनाने के लिए। मैंने इंटरनेट पर उच्च और निम्न खोज करने की कोशिश की है। मुझे दर्जनों साइटें मिली हैं जो बताती हैं कि आपको docker-machine ip default के मूल्य का उपयोग करके localhost के बजाय कंटेनर तक पहुंचने की आवश्यकता है, लेकिन यह समझाने के लिए कुछ भी नहीं है कि किसी भिन्न होस्ट से कैसे पहुंचे। शायद मुझे अपने गुगल कौशल में सुधार करने की जरूरत है।

+0

क्या आपको कोई समाधान मिला? – gnz

+1

@gnz क्रमबद्ध करें .. नीचे मेरा जवाब देखें। अधिक जानकारी [यहां] (https://github.com/docker/machine/issues/1491) – chetstone

उत्तर

4

ठीक है, इसलिए मुझे ब्रिजिंग नेटवर्क एडेप्टर का उपयोग करने की कोशिश करने से ऐसा करने का बेहतर तरीका मिला। मैंने इसे port forwarding पर boot2docker दस्तावेज़ों में पाया।

बस VBoxManage modifyvm default --natpf1 "my_web,tcp,,8080,,80" का उपयोग करें या एनएटी एडाप्टर के लिए अपने पोर्ट अग्रेषण निर्दिष्ट करने के लिए वर्चुअलबॉक्स जीयूआई का उपयोग करें।

फिर, अपने डॉकर रन कमांड से -p विकल्प हटाएं और इसके बजाय --net=host का उपयोग करें। यही कारण है कि

docker run -d -p 8080:80 --name=web nginx 

उपयोग

docker run -d --net=host --name=web nginx 

और देखा के बजाय है! आपका वेब सर्वर लोकलहोस्ट पर उपलब्ध है: 8080 आपके होस्ट या यूरोस्टॉप पर: 8080 कहीं और आपके LAN पर।

ध्यान दें कि --net=host का उपयोग वीएम पर कंटेनरों के बीच संचार को गड़बड़ कर सकता है, लेकिन चूंकि यह एकमात्र कंटेनर है जिसे मैं चलाने की योजना बना रहा हूं, यह मेरे लिए बहुत अच्छा काम करता है।

+1

बूट 2 डॉकर के साथ मैक के नवीनतम डॉकर के साथ इसे कैसे प्राप्त किया जाए इस पर कोई विचार है? –

5

यह मेरे लिए काम कर

    वीएम डोकर मशीन पुनर्जन्म-प्रमाणपत्र के साथ एक 3 "पुल" नेटवर्क
  • जोड़ने डोकर मशीन शुरू मशीन नाम के साथ वीएम शुरू
  • पुनर्जन्म प्रमाणपत्र बंद कर दिया साथ
  • मशीन नाम

जांच अगर डोकर-मशीन के साथ ठीक ls

0

यह सवाल मा उपयोग में मामला (मैक) नेटवर्क

एक बार कंटेनर आवेदन शुरू कर दिया गया है और नीचे के रूप में सामने आ रहा मेजबान में अनुप्रयोगों के मेजबान (मैक) मशीन या अन्य मशीनों से कंटेनर में चल रहा है उपयोग करने के लिए किया जाएगा

docker run -d -p 8080 <<image-name>> 

फिर नीचे

docker port <<container-name>> 
sample output : 8080/tcp -> 0.0.0.0:32771 

अब मेजबान (मैक आईपी) के रूप में कंटेनर आवेदन का उपयोग के रूप में कंटेनर बंदरगाह के साथ मेजबान (मैक) बंदरगाह के बीच मानचित्रण लगता है: अपने मेजबान में किसी भी मशीन से 32771 (मैक) नेटवर्क

1

मैक के लिए डॉकर टूलबॉक्स वाली मशीन पर, मैं निम्नानुसार समस्या को हल कर रहा हूं (default मशीन का उपयोग करके)। अगर यह चल रहा है

तैयारी

  1. मशीन बंद करो:

    docker-machine stop default

VirtualBox के सेटअप

  1. ओपन वर्चुअलबॉक्स, default मशीन का चयन करें, सेटिंग्स खोलें (Cmd-S), नेटवर्क पर जाएं, और "एडाप्टर 3" चुनें।

  2. "नेटवर्क एडाप्टर सक्षम करें" की जांच करें (इसे चालू करें)।

  3. "ब्रिज एडाप्टर" से "संलग्न" सेट करें।
  4. नाम "en0: ईथरनेट" (या जो भी प्राथमिक नेटवर्क इंटरफ़ेस या आपका मैक है) पर सेट करें।
  5. "उन्नत" का खुलासा करें, और सुनिश्चित करें कि "केबल कनेक्ट" की जांच की गई है।
  6. "एडाप्टर 3" के "मैक पता" पर ध्यान दें (हम इसे बाद में उपयोग करेंगे)।
  7. सेटिंग्स को सहेजने के लिए "ठीक" दबाएं।

डोकर सेटअप

  1. अब, टर्मिनल में वापस आ गया, मशीन शुरू:

    docker-machine start default

  2. शायद ज़रुरत पड़े, पुनर्जीवित चेतावनी:

    docker-machine regenerate-certs default

  3. अद्यतन वातावरण:

    eval $(docker-machine env default)

इस बिंदु पर, मशीन (192.168.99.100 के डिफ़ॉल्ट आईपी पता, केवल से होस्टिंग मैक सुलभ के साथ) चलना चाहिए। हालांकि, यदि आप डॉकर वीएम (docker-machine ssh default) में एसएसएच करते हैं और ifconfig -a चलाते हैं, तो आप देखेंगे कि वीएम के इंटरफेस में से एक (eth0 मेरे मामले में) में आपके मैक के समान नेटवर्क में एक आईपी है (उदाहरण के लिए 1 9 2.168.0.102), जो आपके LAN पर अन्य उपकरणों से सुलभ है।

रूटर सेटअप

अब, अंतिम चरण यकीन है कि यह पता तय हो गई है, और अपने रूटर के डीएचसीपी द्वारा समय-समय पर बदला नहीं बनाना है। यह राउटर से राउटर से भिन्न हो सकता है, निम्नलिखित मेरे नो-फ्रिल्स टीपी-लिंक राउटर पर लागू होता है, लेकिन अन्य बनाने और मॉडल के लिए आसानी से समायोज्य होना चाहिए।

  1. अपने रूटर की सेटिंग खोलें, और सबसे पहले देखें कि default, रूटर के डीएचसीपी क्लाइंट की सूची में है ऊपर चरण 7 से मैक पता के साथ।

  2. राउटर सेटिंग्स में "डीएचसीपी"> "पता आरक्षण" खोलें, और "एडाप्टर 3" मैक पता जोड़ें (आपको लापता डैश डालना पड़ सकता है), और आपका वांछित आईपी (उदाहरण 1 9 2.168.0.201) ।

  3. अब मेरा राउटर मुझे इसे रीबूट करने के लिए कहता है। रीबूट के बाद, डॉकर वीएम के लिए अपना नया आईपी पता लेने के लिए docker-machine restart default चलाएं।

  4. अंतिम सत्यापन: docker-machine ssh default, तो ifconfig -a, और उत्पादन में अपने नए आईपी पते (इस बार इंटरफ़ेस eth1 था) लगता है।

परिणाम

होस्टिंग मैक मशीन से दो पते (192.168.99.100 और 192.168.0.201) के माध्यम से पहुँचा जा सकता है; लैन में अन्य उपकरणों से यह 1 9 2.168.0.201 के रूप में सुलभ है।

+0

बस एफवाईआई, आप 'डॉकर-मशीन एनवी डिफ़ॉल्ट' में 'डिफ़ॉल्ट' ड्रॉप कर सकते हैं ('डिफ़ॉल्ट' है, ठीक है, डिफ़ॉल्ट तर्क):' eval $ (डॉकर-मशीन एनवी) ' – nathanleclaire

+0

निश्चित रूप से, लेकिन यदि आपके पास है , या हो सकता है, एक से अधिक वीएम, मशीन नाम को स्पष्ट रूप से निर्दिष्ट करना अधिक स्पष्ट है। निश्चित रूप से अभ्यास में गिराया जा सकता है। –

संबंधित मुद्दे