2017-05-17 12 views
5

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

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

डोकर कंटेनर # 1 एक आवेदन है कि एक ZMQ रिस्पांस सॉकेट बनाता है और ": // tmp/SERVICE_NAME आईपीसी" को बांधता है निष्पादित करता है।

डॉकर कंटेनर # 2 एक ऐसा एप्लिकेशन निष्पादित करता है जो एक ZMQ अनुरोध सॉकेट बनाता है और "ipc: // tmp/service_name" से जुड़ता है।

निम्न कमांड दो अलग-अलग डोकर कंटेनरों में अनुप्रयोगों को चलाने के लिए इस्तेमाल किया जाता है:

// Run container #1 (binds to "ipc://tmp/service_name") 
docker run --name c1 -it container1 

// Run container #2 (connects to "ipc://tmp/service_name") 
docker run -it --link c1:container1 --name c2 container2 

कंटेनर चलाने के बाद, मैं ZMQ (आईपीसी) कनेक्शन स्थापित करने में सक्षम नहीं हूँ। हालांकि, मैं कंटेनर से कंटेनर 2, और पिंग कंटेनर 2 से कंटेनर 1 पिंग करने में सक्षम हूँ 1.

मैं भी --ipc आदेश का उपयोग करने की कोशिश की, लेकिन यह मदद नहीं की:

// Run container #1 (binds to "ipc://tmp/service_name") 
docker run --name c1 --ipc=host -it container1 

// Run container #2 (connects to "ipc://tmp/service_name") 
docker run -it --link c1:container1 --ipc=container:c1 --name c2 container2 

अद्यतन : मैं ज़ेडएमक्यू टीसीपी सॉकेट का उपयोग करके दो अलग डॉकर कंटेनर के बीच संवाद करने में सक्षम हूं, लेकिन अभी भी आईपीसी सॉकेट का उपयोग करके संवाद करने में असमर्थ हूं। क्या यह संभव है?

+1

आपने स्वयं की जांच कैसे की। क्या आपने उदाहरण के लिए पढ़ा [यह] (https://torusware.com/blog/2015/04/optimizing-communications-between-html/) आलेख? –

+0

आप इसे स्वयं क्यों नहीं आज़माते हैं और त्रुटि के बारे में रिपोर्ट करते हैं, इसलिए वास्तव में हमारे पास मदद करने के लिए कुछ है? –

+0

हां, मैंने उस लेख को @ जेरोएनहेयर पढ़ा था। मैं इसे फिर से पढ़ने जा रहा हूं और यह देखने के लिए फिर कोशिश कर रहा हूं कि कुछ ऐसा है जो मुझे याद आ रहा है। – milenko

उत्तर

2

क्या आपने Shared Memory with Docker containers (docker version 1.4.1) देखा है? ऐसा लगता है कि आप वॉल्यूम को साझा करने के लिए नींद लेते हैं जहां आईपीसी रहता है और --ipc host भी सेट करता है। आपके उदाहरण में, यह कुछ ऐसा होगा:

# Container #1 
docker run -it --name c1 -v /tmp:/tmp --ipc=host container1 

# Container #2 
docker run -it --name c2 -v /tmp:/tmp --ipc=host container2 
+0

यह काम किया! धन्यवाद @ एंडी शिन्न – milenko

+1

मुझे लगता है कि कार्यान्वयन को सिर्फ एक साझा/tmp की आवश्यकता है। '--ipc = host' की कोई आवश्यकता नहीं है। मैं सुरक्षा कारणों से मेजबान/टीएमपी और न ही आईपीसी साझा नहीं करूंगा ... –

+0

@ रिकार्डोब्रैंको से सहमत। निम्नलिखित भी काम करता है: 'डॉकर रन-एट --नाम सी 1-वी/टीएमपी कंटेनर 1 डॉकर रन-एट --नाम सी 2 - आईपीसी = कंटेनर: सी 1 - वॉल्यूम-सी 1 कंटेनर 2' – milenko

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