2016-03-21 13 views
8

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

मेरे पास एक कंटेनर (एमएस 1) है जिसे अपने स्वयं के नेटवर्क (मेरे मामले में "सेवाएं") में रखा जाना चाहिए, और एक कंटेनर (एपीगेटवे) जिसे मेजबान नेटवर्क पर http पोर्ट को उजागर करते समय उस नेटवर्क तक पहुंचना चाहिए।

आदर्श रूप में मेरी डोकर लिखें फ़ाइल इस प्रकार दिखाई देगा:

version: '2' 
services: 
    ms1: 
     expose: 
      - "13010" 
     networks: 
      services: 
       aliases: 
        - ms1 
    apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     network_mode: "host" 
networks: 
    services: 

डोकर-लिखें एक ही समय में network_mode और नेटवर्क का उपयोग करने की अनुमति नहीं है।

क्या मेरे पास अन्य विकल्प हैं?

फिलहाल मैं इस का उपयोग कर रहा:

apigateway: 
     networks: 
      services: 
       aliases: 
        - api 
     ports: 
      - "127.0.0.1:10000:13010" 

और फिर apigateway कंटेनर 0.0.0.0:13010 पर सुनता है। यह काम करता है लेकिन यह धीमा है और मेजबान का इंटरनेट कनेक्शन नीचे चला जाता है तो यह जम जाता है।

इसके अलावा, मैं डॉकर पर भविष्य में योनि का उपयोग करने की योजना बना रहा हूं, क्या यह एक साफ तरीके से हल करने की अनुमति देता है?

+0

क्या आप सिर्फ एपीगेटवे से एमएस 1 का आईपी पता उपयोग कर सकते हैं? Https: // stackoverflow देखें।कॉम/प्रश्न/27 9 37185/असाइन-स्टेटिक-आईपी-टू-डॉकर-कंटेनर डॉकर के साथ इसे कैसे करें 1.10.1 –

+0

मैं ऐसा करने की कोशिश कर रहा हूं लेकिन एक अलग समस्या को हल करने के लिए (शायद)। मेरे मामले में मैंने दो सेवाओं के बीच साझा किया गया नेटवर्क बनाया लेकिन किसी कारण से, सेवाओं में से एक इंटरनेट से कनेक्ट नहीं हुई थी (मैंने सोचा था कि यह मेजबान नेटवर्क का हिस्सा नहीं था)। हालांकि, समस्या यह थी कि यह URL को हल नहीं कर सका क्योंकि DNS तक पहुंचने में सक्षम नहीं है। मैंने आईपी पते का उपयोग करके एक क्विकफिक्स किया लेकिन सही DNS पर अनुरोध को आगे बढ़ाने के लिए इसे पूरी तरह से देखेंगे। – omrsin

उत्तर

0

मैं यह कोशिश करेंगे:

1/मेजबान नेटवर्क docker network ls

खोजें

2/उपयोग इस dockercompose फ़ाइल

 services: 
      ms1: 
       ports: 
        - "13010" 
       networks: 
        - service 
      apigateway: 
       networks: 
        - front 
        - service 

     networks: 
      front: 
      service: 
       external: 
        name: "<ID of the network>" 
+0

जब मैं ऊपर दिए गए आदेश का उपयोग कर होस्ट नेटवर्क बनाने का प्रयास करता हूं तो मुझे यह त्रुटि मिलती है 'डेमॉन से त्रुटि प्रतिक्रिया: "होस्ट" नेटवर्क का केवल एक उदाहरण' – disrvptor

+0

है, तो आप पहले से मौजूद किसी का उपयोग कर सकते हैं। मैंने अपना जवाब अपडेट किया लेकिन मैं इसका परीक्षण करने की क्षमता में नहीं हूं। – Plup

0

डोकर 1.13 में आप के लिए एक सेवा बनाने के लिए सक्षम होना चाहिए दो नेटवर्क के बीच पुल। मैं कुछ इसी तरह का उपयोग कर रहा another problem ठीक करने के लिए और मुझे लगता है कि यह भी यहाँ मदद कर सकता है:

docker service create \ 
--name proxy \ 
--network proxy \ 
--publish mode=host,target=80,published=80 \ 
--publish mode=host,target=443,published=443 \ 
--constraint 'node.hostname == myproxynode' \ 
--replicas 1 \ 
letsnginx 
0

expose में डोकर-रचना does not publish the port on the host। चूंकि आपको शायद अब लिंकिंग सेवा की आवश्यकता नहीं है (इसके बजाय आपको पहले से ही डॉकर नेटवर्क पर भरोसा करना चाहिए), विकल्प में सामान्य रूप से सीमित मूल्य है और ऐसा लगता है कि आपके परिदृश्य में आपके लिए कोई मूल्य नहीं है।

मैं संदिग्ध आप गलती से और एहसास है कि यह अपने आप में कोई असर नहीं लगता था के बाद इसका उपयोग करने के लिए आए हैं, इस तथ्य पर ठोकर खाई है कि मेजबान नेटवर्क ड्राइवर का उपयोग कर "यह काम" होगा। expose संपत्ति के साथ इसका कोई लेना-देना नहीं था, आपको दिमाग। यह सिर्फ इतना है कि मेजबान नेटवर्क चालक निहित प्रक्रियाओं को मेजबान नेटवर्क इंटरफेस से सीधे बांधने देता है। इसके लिए धन्यवाद, आप बाहर से एपीआई गेटवे प्रक्रिया तक पहुंच सकते हैं। आप expose संपत्ति को हटा सकते हैं और यह अभी भी काम करेगा।

यह केवल कारण है कि आप मेजबान नेटवर्क चालक उठाया है, की तो आप गिर गए शिकार X-Y problem:

(tl; डॉ) आप मेजबान नेटवर्क ड्राइवर का उपयोग करने की आवश्यकता है कभी नहीं करना चाहिए सामान्य परिस्थितियों में, डिफ़ॉल्ट पुल नेटवर्क ड्राइवर ठीक काम करता है। आप जो खोज रहे हैं वह ports संपत्ति है, expose नहीं। यह दृश्यों के पीछे उपयुक्त बंदरगाह अग्रेषण सेट करता है।

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