2017-11-27 39 views
9

में होस्ट नाम के तहत डॉकर मशीन उपलब्ध कराएं मैं एक मेजबान नाम से अपने विंडोज़ में एक डॉकर मशीन उपलब्ध कराने की कोशिश कर रहा हूं।विंडोज

docker-machine create -d virtualbox mymachine 

की तरह इसे बनाने और एक डोकर कंटेनर कि पोर्ट 80 को उजागर करता है, मैं कैसे कि डोकर मशीन इस तरह के एक होस्ट नाम है कि मैं "http://mymachine/" प्रवेश कर सकते हैं अपने ब्राउज़र में वेबसाइट को लोड करने दे सकते हैं स्थापित करने के बाद? जब मैं "mymachine" को वास्तविक आईपी पते में बदलता हूं तो यह काम करता है।

answer इस question पर है लेकिन मैं hosts फ़ाइल में प्रवेश के बिना इसे प्राप्त करना चाहता हूं। क्या यह संभव है?

+0

आप 'होस्ट' फ़ाइल का उपयोग क्यों नहीं करना चाहते हैं? आप किस तरह का समाधान की उम्मीद करते हैं? –

+0

मैं इसे विकास वातावरण चलाने वाले कई डेवलपर्स के लिए जितना संभव हो सके उतना आसान रखने की कोशिश करता हूं। तो मैं मैन्युअल चरणों से बचना चाहता हूं। –

+0

और जहां तक ​​मुझे पता है कि डॉकर मशीन का आईपी पता बदल सकता है उदा। पुनरारंभ करते समय। –

उत्तर

4

यदि लक्ष्य इसे एकाधिक डेवलपर्स के लिए जितना संभव हो सके रखना है, localhost आपकी सर्वश्रेष्ठ शर्त होगी। जब तक आप पोर्ट्स को उजागर और प्रकाशन कर रहे हैं, मेजबान पर उपलब्ध हैं, तो आप ब्राउज़र में http://localhost का उपयोग कर सकते हैं। यदि यह 80/443 के अलावा एक बंदरगाह है, तो इसे http://localhost:8080 की तरह संलग्न करें।

यदि आप वास्तव में /etc/hosts या localhost मार्ग पर नहीं जाना चाहते हैं, तो आप एक डोमेन भी खरीद सकते हैं और इसे 127.0.0.1 पर रूट कर सकते हैं। यह article विवरण थोड़ा और अधिक बताता है।

उदाहरण:

dave-mbp:~ dave$ traceroute yoogle.com 
traceroute to yoogle.com (127.0.0.1), 64 hops max, 52 byte packets 
1 localhost (127.0.0.1) 0.742 ms 0.056 ms 0.046 ms 

वैकल्पिक रूप से, आप अपने खुद के डोमेन खरीदने के लिए नहीं करना चाहते हैं और सभी डेवलपर्स एक ही नेटवर्क पर हैं और आप डीएचसीपी/डीएनएस नियंत्रित करने में सक्षम हैं, तो आप अपने खुद के DNS सेटअप कर सकते हैं यदि सर्वर को 127.0.0.1 पर एक निजी मार्ग शामिल करने के लिए। सार्वजनिक DNS विकल्प के लिए समान अवधारणा, लेकिन थोड़ा और भंगुर क्योंकि आप अपने देवताओं को नियंत्रित नेटवर्क के बाहर रिमोट काम करने की अनुमति दे सकते हैं।

+0

'लोकलहोस्ट' का उपयोग करना एक विकल्प है। मैं आभासी बॉक्स डॉकर वीएम के बंदरगाहों को स्थानीयहोस्ट में कैसे मैप कर सकता हूं? क्या कोई स्वचालित तरीका है 'docker-machine' कमांड में इसे निर्दिष्ट करना? –

+0

' 'docker-machine''' के साथ मेरा मानना ​​है कि आपको वर्चुअलबॉक्स के साथ बातचीत करने की आवश्यकता होगी। यह एक त्वरित सी है होस्ट पोर्ट से वीएम पोर्ट को मैप करने के लिए सेटिंग्स में हेंज। डॉकर स्थापित करने के बाद आपके देवताओं को केवल VBoxManage कमांड चलाने की आवश्यकता होनी चाहिए। विशिष्टताओं के लिए यह [टिप्पणी] (https://stackoverflow.com/a/36286446/4108883) देखें। – DJO3

3

होस्टनाम द्वारा कनेक्ट करने की आवश्यकता है कि आप होस्ट नाम से आईपी रिज़ॉल्यूशन में जाएं। यह मेजबान फ़ाइल द्वारा संभाला जाता है और वापस DNS पर गिर जाता है। यह सब कभी भी डॉकर कंटेनर को छूने से पहले होता है, और डॉकर मशीन के पास बाहर जाने और अपनी मेजबान फ़ाइल या DNS सर्वर को कॉन्फ़िगर करने के लिए कोई बाहरी हुक नहीं होता है।

विंडोज़ पर डॉकर के नए संस्करणों के साथ, आप हाइपरवी के साथ कंटेनर चलाते हैं और नेटवर्किंग स्वचालित रूप से स्थानीय पोर्ट पर बंदरगाहों को मानचित्र करता है ताकि आप http://localhost से कनेक्ट हो सकें। यह डॉकर-मशीन के साथ काम नहीं करेगा क्योंकि यह स्थानीयहोस्ट मैपिंग के बिना वर्चुअलबॉक्स वीएम को कताई कर रहा है।

यदि आप अपनी मेजबान फ़ाइल, DNS को कॉन्फ़िगर नहीं करना चाहते हैं, और डॉकर के नए संस्करण का उपयोग नहीं कर सकते हैं, तो आपको आईपी से कनेक्ट करने के साथ छोड़ दिया जाता है। आप क्या कर सकते हैं एक मुफ्त वाइल्डकार्ड DNS सेवा जैसे http://xip.io/ का उपयोग करें जो आपके आईपी पते के साथ, उसी आईपी पते पर वापस आने वाले किसी भी नाम को मानचित्र करता है। यह आपको एक ही पोर्ट के पीछे डॉकर के अंदर एकाधिक कंटेनर से कनेक्ट करने के लिए होस्टनाम आधारित रिवर्स प्रॉक्सी जैसी चीज़ों का उपयोग करने देता है।

एक अंतिम विकल्प एक स्थिर आईपी के साथ अपने डॉकर होस्ट वीएम को चलाने का है। Docker-machine doesn't support this directly yet, तो आप या तो एक ही आईपी को किसी दिए गए रेंज से रखने के लिए भाग्य पर भरोसा कर सकते हैं, या लैपटॉप पर एक स्थिर आईपी के साथ डॉकर होस्ट वीएम को स्पिन करने के लिए वाग्रेंट जैसे किसी अन्य टूल का उपयोग कर सकते हैं। एक बार आपके पास स्थैतिक आईपी हो जाने के बाद, आप एक बार मेजबान फ़ाइल को संशोधित कर सकते हैं, प्रत्येक देव के लिए DNS प्रविष्टि बना सकते हैं, या प्रत्येक बार कंटेनरों तक पहुंचने के लिए उसी xip.io URL का उपयोग कर सकते हैं।

1
  • आप अपने hosts file में एक डोमेन नाम प्रविष्टि जोड़ सकते हैं:

    X.X.X.X mymachine # Replace X.X.X.X by the IP of your docker machine 
    
  • तुम भी अपने स्थानीय नेटवर्क पर एक DNS सर्वर सेट कर सकते हैं अपनी एप्लिकेशन को अपने सहकर्मियों से पहुँच योग्य होना करने के लिए है, तो आपकी कार्यस्थल और यदि आपकी विंडोज मशीन सर्वर के रूप में बने रहने के लिए है।

    जो आपके वीएम को स्थानीय नेटवर्क से सुलभ बनाने की आवश्यकता होगी, लेकिन port forwarding तब एक आसान समाधान हो सकता है यदि आपका ऐप आपके विंडोज होस्ट पर चलने वाला एकमात्र webservice है। (ध्यान दें कि आप विंडोज़ पर डॉकर-मशीन का उपयोग करने से बचने के लिए एक लिनक्स सर्वर भी सेट कर सकते हैं, लेकिन आपको यह सुनिश्चित करने के लिए कि आपका डोमेन नाम रिज़ॉल्यूशन काम करता है) के लिए आपको अभी भी एक स्थिर आईपी सेट करना होगा।

  • आप अपना खुद का डोमेन नाम भी खरीद सकते हैं (या एक मुफ्त प्राप्त कर सकते हैं) और यदि आपको अपनी मेजबान फ़ाइल में लिखने का अधिकार नहीं है तो इसे अपने डॉकर-मशीन के आईपी असाइन करें।

लेकिन इन समाधान कुछ समय के बाद अब काम नहीं हो सकता है यदि एप्लिकेशन मेजबान एक static IP नहीं है और अपने डोकर मशीन आईपी परिवर्तन है)। स्थिर आईपी स्थापित नहीं करने से यह संकेत नहीं मिलता है कि यह स्वचालित रूप से बदल जाएगा हालांकि, यदि आप एक नया निर्माण करने के लिए मशीन को मिटाना नहीं चाहते हैं तो कुछ दृढ़ता होनी चाहिए, लेकिन इसकी गारंटी नहीं दी जाएगी।

यह भी ध्यान दें कि यदि आप एक DNS सर्वर सेट अप करते हैं, तो आपको इसे एक स्थिर आईपी के साथ डिवाइस पर होस्ट करना होगा। इसके बाद आपके सहकर्मियों को अपनी मशीन को इस का उपयोग करने के लिए कॉन्फ़िगर करना होगा।

7

आप documentaion डोकर का उल्लेख करना चाह सकते हैं: https://docs.docker.com/engine/userguide/networking/#exposing-and-publishing-ports

आप Dockerfile में बेनकाब कीवर्ड या --expose ध्वज का उपयोग कर रन डोकर के बंदरगाहों का पर्दाफाश। एक्सपोज़िंग पोर्ट्स दस्तावेजों का उपयोग करने का एक तरीका है जो बंदरगाहों का उपयोग किया जाता है, लेकिन वास्तव में किसी भी बंदरगाह को मानचित्र या खोल नहीं देता है। एक्सपोज़िंग बंदरगाह वैकल्पिक है।

आप पोर्टल को प्रकाशित करते हैं - प्रकाशित या - प्रकाशित करें- सभी ध्वज डॉकर रन पर। यह डॉकर को बताता है कि कौन से बंदरगाह कंटेनर के नेटवर्क इंटरफ़ेस पर खुलने के लिए बंदरगाहों को खोलते हैं। जब एक बंदरगाह प्रकाशित होता है, तो यह मेजबान मशीन पर उपलब्ध हाई-ऑर्डर पोर्ट (30000 से अधिक) तक मैप किया जाता है, जब तक कि आप रनटाइम पर होस्ट मशीन पर मैप करने के लिए पोर्ट निर्दिष्ट करते हैं। छवि (डॉकरफ़ाइल में) बनाने के लिए होस्ट मशीन पर मैप करने के लिए पोर्ट निर्दिष्ट करें, क्योंकि यह गारंटी देने का कोई तरीका नहीं है कि पोर्ट होस्ट मशीन पर उपलब्ध होगा जहां आप छवि चलाते हैं।

मैं भी -पी ध्वज की समीक्षा के रूप में यह -p एक से अलग है सुझाव देते हैं।

यह भी सुझाव है कि आप विंडोज या मैक, https://kitematic.com/ के लिए "किटमैटिक" आज़माएं। यह बहुत आसान है (लेकिन किसी भी बदलाव के बाद प्रतिबद्ध होना न भूलें!)

अब आपकी कंपनी के नेटवर्क से संबंधित, इसमें डॉकर के साथ कुछ लेना देना नहीं है, जब तक आप अपने कंप्यूटर पर स्थानीय रूप से डॉकर का उपयोग कर रहे हों, इससे कोई फर्क नहीं पड़ता विन्यास आपकी कंपनी सेट।यहां तक ​​कि आप न के लिए अपने स्थानीय होस्ट करने के लिए चीजों को बेनकाब करने के लिए किसी भी वीएम नेटवर्क config बदलना होगा, सभी डिफ़ॉल्ट रूप से आता है अगर आप vbox उपयोग कर रहे हैं (अनुकूलक 1 ==> नेट & एडाप्टर 2 ==> होस्ट केवल)

उम्मीद है कि आप यही देख रहे हैं

+0

और मेजबान नाम से यह मेरी डॉकर मशीन तक पहुंचने में कैसे मदद करता है? –

+0

डॉकर कंटेनर को आपके लोकहोस्ट में मैप किया जाना चाहिए ताकि आप इसे अपने वेबब्रोसर के माध्यम से एक्सेस कर सकें।यह किसी भी अन्य तरीके से काम नहीं कर सकता है, लेकिन केवल तभी जब आप अपने एडाप्टर के पते को दोहराते हैं और इसे ** पुल ** मोड में असाइन करते हैं, तो यह सीधे अपने आईपी पते के साथ भौतिक नेटवर्क से कनेक्ट हो सकता है, तो आप इसे अपने आईपी पते टाइप करके एक्सेस कर सकते हैं 'localhost' + के बजाय ब्राउज़र में यदि आप ब्राउज़र में किसी आईपी पते के बजाय कोई नाम टाइप करना चाहते हैं तो यह एक अलग कहानी है और आपको उस आईपी के लिए' अनबाउंड DNS' या 'dnsmasq' आदि का उपयोग करके एक नाम खराब करना होगा। .. –

0

मैं nginx-proxy का सुझाव देता हूं। यही वह है जो मैं हर समय उपयोग करता हूं। यह विशेष रूप से आसान होता है जब आप विभिन्न कंटेनर चला रहे होते हैं जिन्हें सभी एक ही पोर्ट (जैसे एकाधिक वेब-सेवाओं) का जवाब देना चाहते हैं।

nginx-proxy आपकी सेवा से अलग-अलग चलता है और अपनी स्वयं की कॉन्फ़िगरेशन को अपडेट करने के लिए डॉकर-ईवेंट को सुनता है। आपके सेवा को बढ़ाने के बाद और पोर्ट nginx-proxy से पूछताछ करने के बाद, आपको अपनी सेवा पर रीडायरेक्ट कर दिया जाएगा। इसलिए आपको या तो DEFAULT_HOST ध्वज के साथ nginx-proxy शुरू करने या अनुरोध के साथ वांछित होस्ट को हेडर पैराम के रूप में भेजने की आवश्यकता है।

जैसा कि मैं इसे केवल सादे डॉकर के साथ चला रहा हूं, मुझे नहीं पता कि यह डॉकर-मशीन के साथ काम करता है या नहीं।

1

यदि आप मल्टीकास्टिंग DNS (जो मैक पर बोनजोर है) वाली मशीन पर हैं, तो मेरे लिए काम करने वाला दृष्टिकोण डॉकर मशीन vbox में an Avahi container को आग लगाना है। यह मुझे वीएम सेवाओं को <docker-machine-vm-name>.local पर संदर्भित करने देता है। कोई संपादन /etc/hosts, कोई पागल नेटवर्किंग सेटिंग्स नहीं।

मैं अपने काम है, जो चिंताओं का एक अच्छा जुदाई रहता है के लिए विभिन्न परियोजनाओं के लिए अलग Virtualbox VMs का उपयोग करें (बंदरगाह टकराव होने से बचाता है,, मुझे मेरे अन्य परियोजनाओं को प्रभावित किए बिना सभी कंटेनर और छवियों दूर उड़ा देता है आदि)

version: '2' 
services: 
    avahi: 
     image: 'enernoclabs/avahi:latest' 
     network_mode: 'host' 

फिर अगर मैं पोर्ट 80 करने के लिए एक डोकर कंटेनर अग्रेषण के साथ वी एम में एक वेबसर्वर चलाने के लिए, यह सिर्फ http://machine-name.local ब्राउज़र में बताया गया है: docker-compose का उपयोग करना, मैं तो बस एक Avahi उदाहरण प्रत्येक परियोजना के शीर्ष पर डाल दिया।