ডকার-রচনা দ্বারা শুরু হওয়া চলমান ধারকটিতে লিঙ্ক করা যায় না


103

আমি আমার স্থানীয় উন্নয়নের পরিবেশটি ডকারের পাত্রে স্থাপন করছি। ডকার-কমপোজ.আইএমএল নীচের মত

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 

একই ত্রুটি।

সুতরাং আমি কীভাবে ডকার-রচনা দ্বারা চালিত কোনও চলমান ধারকটির সাথে লিঙ্ক করব?

উত্তর:


202

ঠিক আছে, এর উত্তর খুঁজে পেয়েছি। যদি অন্য কেউ একই সমস্যায় আসে তবে ঠিক করুন just

docker network ls

এই কমান্ডটি সমস্ত ডকার নেটওয়ার্ক তালিকাভুক্ত করে। আপনি ডকার-কমপোজ আপ চালানোর সময় ডকার-কমপোজ একটি নতুন নেটওয়ার্ক তৈরি করবে। আমার ক্ষেত্রে, নেটওয়ার্কটির নামকরণ করা হয়েছে মাইয়াপ_ডিফাল্ট।

দ্রষ্টব্য: আপনার অ্যাপ্লিকেশনটির নেটওয়ার্কটিকে "প্রকল্পের নাম" এর উপর ভিত্তি করে একটি নাম দেওয়া হয়েছে যা এটি যে ডিরেক্টরিতে থাকে তার নামের উপর ভিত্তি করে You আপনি প্রকল্পের নামটি - প্রকল্পের নাম পতাকা বা COMPOSE_PROJECT_NAME এনভায়রনমেন্ট ভেরিয়েবলের মাধ্যমে ওভাররাইড করতে পারেন । রচনায় নেটওয়ার্কিং

সুতরাং সেই পাত্রে লিঙ্ক দেওয়ার সঠিক উপায় হ'ল

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

9
যারা খেয়াল করেন নি তাদের জন্য আপনাকে --netকমান্ডের সামনে রাখতে হবে। অফিসিয়াল রেডিস ডকার চিত্র চালানোর চেষ্টা করার সময় আমি এই সমস্যার মুখোমুখি হয়েছি।
মিস্ত্রি

4
আমাকে - নেট এর পরিবর্তে - নেট ওয়ার্ক ব্যবহার করতে হয়েছিল। রান কমান্ডের শুরুতে এটি ব্যবহার করুন। আশা করি এটা কাজে লাগবে. রেফারেন্স এখানে পাওয়া যায়: 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.