2017-01-20 16 views
10

here is the image when i type docker psडॉकर में कंटेनर को कैसे लिंक करें?

डोकर में

, मैं 3 कंटेनर, webapps, redis और RabbitMQ, मैं कंटेनर redis और RabbitMQ कंटेनर के लिए कंटेनर webapps लिंक करने के तरीके को भ्रमित कर रहा हूँ है? , गैर डॉकर ऐप्स में, mywebapps rabbitmq को संदेश भेज सकते हैं और reddis लिख/पढ़ सकते हैं। मैं stil किसी भी विचार कैसे 3 से जोड़ने के लिए उन कंटेनर नहीं है, मैं इस

docker run --name rabbitmq -p 8080:80 --link webapps:nimmis/apache-php7 -d rabbitmq 

की तरह आदेश का उपयोग करने की कोशिश की, लेकिन यह अभी भी काम नहीं

यहाँ webapps पर मेरे config.php है जब मैं करने की कोशिश RabbitMQ के माध्यम से संदेश भेजने

define('HOST', 'localhost'); 
define('PORT', 5672); 

मैं होस्ट नाम के साथ स्थानीय होस्ट बदलने की कोशिश की

define('HOST', 'rabbitmq'); 
define('PORT', 5672); 

त्रुटि संदेश कनेक्शन से इनकार कर दिया गया है ... ऐसा लगता है कि मेरे तीन कंटेनर में एक ही आईपी में नेटवर्क को कॉन्फ़िगर/मैपिंग/बाइंड करने की आवश्यकता है?

] 2

उत्तर

19

लिंकिंग एक विरासत सुविधा है। "उपयोगकर्ता परिभाषित नेटवर्क" का उपयोग करें:

sudo docker network create mynetwork 

तब इस नेटवर्क का उपयोग अपने कंटेनर को फिर से चलाएं:

sudo docker run --name rabbitmq -p 8080:80 -d --network mynetwork rabbitmq 

अन्य कंटेनरों है कि आप एक दूसरे के साथ जुड़ा चाहते हैं के लिए एक ही मत करो।

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

सभी उसी "उपयोगकर्ता परिभाषित नेटवर्क" पर containters नेटवर्क कनेक्टिविटी होगी। "विरासत लिंकिंग" की कोई आवश्यकता नहीं है।

1

अंतर-कंटेनर निर्भरताओं और लिंक के लिए, आप docker-compose का उपयोग करना चाहेंगे जहां आप links कंटेनरों के बीच परिभाषित कर सकते हैं।

अपने रूट निर्देशिका में है जहाँ आप अपने डोकर फ़ाइलों को स्टोर, बस docker-compose.yml नामक एक नई फ़ाइल बनाने के लिए और यहाँ आप अपने कंटेनर सेवाओं जो इस तरह एक-दूसरे पर भरोसा करते हैं के रूप में परिभाषित कर सकते हैं:

version: '2' 
services: 
    webapps: 
    build: . 
    links: 
     - "rabbitmq:rabmq" 
     - "redis" 

    rabbitmq: 
    image: rabbitmq 

    redis: 
    image: redis 

इसलिए यहाँ में webapps सेवा की परिभाषा, आप इसे links अन्य दो सेवाएं rabbitmq और redis देखें। इसका अर्थ यह है कि जब webapps कंटेनर बनता है, तो इसकी hosts फ़ाइल में एक प्रविष्टि ऐसी होती है कि डोमेन नाम redis को वास्तविक कंटेनर के आईपी और पोर्ट नंबर में अनुवादित किया जाता है।

आप कैसे इस कंटेनर service:alias अंकन का उपयोग, मैं की तरह कैसे परिभाषित को rabbitmq कंटेनर webapps अंदर उर्फ ​​rabmq का उपयोग करके पता है के नाम बदलने का विकल्प है।

अब निर्माण और docker-compose का उपयोग कर बस टाइप अपने कंटेनर शुरू करने के लिए:

docker-compose up -d 

तो एक और कंटेनर से कनेक्ट कर मेजबान के नाम के रूप में इस उपनाम का उपयोग के रूप में सरल है।

चूंकि आप इस मामले में docker-compose का उपयोग कर रहे हैं, इसलिए यह सभी कंटेनरों को जोड़ने के लिए स्वचालित रूप से एक डॉकर नेटवर्क बनाता है ताकि आपको इसके बारे में चिंता न करें। लेकिन अधिक जानकारी के लिए दस्तावेज़ों पर एक नज़र डालें: https://docs.docker.com/compose/networking/#/specifying-custom-networks

1

आपको अपने वेबपैस कंटेनर में खरगोश और रेडिस को जोड़ने की ज़रूरत है, न कि दूसरी तरफ।

 

    #run redis container 
    docker run --name some-redis -d redis 

    #run rabbitmq container 
    docker run -d --hostname my-rabbit --name some-rabbit rabbitmq 

    #run webapps container 
    docker run --name webapps -p 8080:80 --link some-redis:redis --link some-rabbit:rabbitmq nimmis/apache-php7 

फर्स्ट रन redis और RabbitMQ कंटेनरों। फिर 2 कंटेनर के लिंक के साथ वेबएप कंटेनर चलाएं।

अब वेबपैस में रेडिस होस्ट को कॉन्फ़िगर करने के लिए - यह आसान है। आप बस एनवी वैरिएबल 'REDIS_PORT_6379_TCP_ADDR' का उपयोग कर सकते हैं। क्योंकि एक बार एक कंटेनर जुड़ा हुआ है तो आप इसके env चर मिलते हैं। और redis निर्यात चर है। -

RabbitMQ मेजबान के बारे में आप के बाद खरगोश कंटेनर से ऊपर है आईपी प्राप्त कर सकते हैं:

 

    RABBITMQ_IP=$(docker inspect --format '{{ .NetworkSettings.IPAddress }}' some-rabbit) 

और फिर --env में इसे पारित जब आप webapps कंटेनर चलाते हैं।

+0

thanks..problem ओके हल ... फ़ाइल config iin, मैं स्थानीय होस्ट से मेरी RabbitMQ सर्वर स्थानीय आईपी पता बदलने IPADDRESS के आईपी पते को देखने के लिए ... मैं टाइप डोकर का निरीक्षण [containerid] धन्यवाद नेसिया अमित, फरहाद फरही और पिट :) –

+0

एक बेहद असुविधाजनक समाधान। यह पुराना है, और बहिष्कृत है, और भविष्य में काम नहीं करेगा। @farhadfarahi द्वारा पुल नेटवर्क समाधान सबसे अच्छा जवाब है। –

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