डॉकटर-कंपोज़ द्वारा शुरू किए गए एक चल रहे कंटेनर से लिंक नहीं किया जा सकता


99

मैं अपने स्थानीय विकास के माहौल को डॉकटर कंटेनरों के साथ स्थापित कर रहा हूं। Docker-compose.yml निम्नलिखित की तरह है

version: '2'

services:
  db:
    image: mongo:3
  mq:
    image: rabbitmq:3
  api:
    build: .
    image: my_app/api
    ports:
      - "3000:3000"
    links:
      - db
      - mq
    environment:
      - NODE_ENV=development

यह त्रुटि के बिना शुरू होता है। और डॉकटर 3 चलने वाले कंटेनरों को सूचीबद्ध करता है

docker-compose up -d
docker ps

e90e5a8b5d33        my_app/api    "/usr/local/bin/node "   0.0.0.0:3000->3000/tcp               my_app_api_1
42bfcd971b16        mongo:3       "/entrypoint.sh mongo"   27017/tcp                            my_app_db_1
a0685a816c47        rabbitmq:3    "/docker-entrypoint.s"   4369/tcp, 5671-5672/tcp, 25672/tcp   my_app_mq_1

हालाँकि जब मैं उन कंटेनरों को दूसरे कंटेनर से जोड़ने की कोशिश करता हूँ

docker run --link my_app_mq_1:mq --link my_app_db_1:db -it worker 

मुझे त्रुटि मिलती है

 docker: Error response from daemon: Cannot link to /my_app_mq_1, as it does not belong to the default network.

मैंने भी कोशिश की है

 docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net default worker 

वही त्रुटि।

तो मैं डॉकटर-कंपोज द्वारा शुरू किए गए एक रनिंग कंटेनर से कैसे जुड़ सकता हूं?

जवाबों:


196

ठीक है, इसका जवाब मिल गया। मामले में किसी और को एक ही समस्या आती है, बस

docker network ls

यह कमांड सभी डॉकटर नेटवर्क को सूचीबद्ध करता है। जब आप डॉक-कंपोज़ चलाते हैं तो docker-compose एक नया नेटवर्क बनाएगा। मेरे मामले में, नेटवर्क को myapp_default नाम दिया गया है।

नोट: आपके ऐप के नेटवर्क को "प्रोजेक्ट नाम" के आधार पर एक नाम दिया गया है, जो उस निर्देशिका के नाम पर आधारित है जिसमें आप रहते हैं - आप प्रोजेक्ट का नाम या तो --project-name फ्लैग या COMPOSE_PROJECTY परिवेश चर के साथ ओवरराइड कर सकते हैं। । कंपोज में नेटवर्किंग

तो उन कंटेनरों से जुड़ने का सही तरीका है

docker run --link my_app_mq_1:mq --link my_app_db_1:db -it --net myapp_default worker 

9
जिन लोगों ने आपको नोटिस नहीं किया उनके लिए आपको --netकमांड से पहले रखना होगा । मुझे इस समस्या का सामना तब करना पड़ा जब आधिकारिक रेडिस डॉक इमेज को चलाने की कोशिश की गई।
मिस्टरटीई

3
मुझे -नेट के बजाय --network ध्वज का उपयोग करना था। रन कमांड के शुरू में इसका उपयोग करें। आशा है कि ये आपकी मदद करेगा। संदर्भ यहाँ उपलब्ध है: docs.docker.com/engine/reference/run/#network-settings
एरिजो


2

जब आप सेवा परिभाषा संस्करण 2 और अधिक का उपयोग करते हैं, तो docker-composeउपयोगकर्ता-परिभाषित नेटवर्क बनाता है। उपयोगकर्ता द्वारा परिभाषित नेटवर्क में नाम रिज़ॉल्यूशन डॉकर एम्बेडेड डीएनएस सर्वर के माध्यम से काम करता है। यहाँ प्रलेखन से संबंधित उद्धरण है :

डॉकर एम्बेडेड डीएनएस सर्वर एक दिए गए [उपयोगकर्ता-परिभाषित] नेटवर्क से जुड़े कंटेनरों के लिए नाम समाधान सक्षम करता है। इसका मतलब है कि कोई भी जुड़ा हुआ कंटेनर उसी कंटेनर पर उसके कंटेनर नाम से दूसरे कंटेनर को पिंग कर सकता है।

कंटेनर भी नेटवर्क उपनामों द्वारा उपलब्ध हैं जो docker-composeबनाता है। इसे कमांड द्वारा सत्यापित किया जा सकता है जैसे:

docker inspect \
  -f '{{json .NetworkSettings.Networks.myapp_default.Aliases}}' my_app_db_1

यह प्रिंट करता है ["db","$CONTAINER_ID"]

--linkमौजूदा उपयोगकर्ता-परिभाषित नेटवर्क के मामले में लिंक प्रदान करने से कोई प्रभाव नहीं पड़ेगा। आप यह सुनिश्चित कर सकते हैं और देख सकते हैं /etc/hosts, जिसमें संबंधित रेखाएँ नहीं होंगी।

इस प्रकार निम्नलिखित कमांड पर्याप्त है:

docker run -it --net myapp_default worker
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.