ডকার-কমপোজ সহ কীভাবে একটি একক ধারক পুনরায় চালু করবেন


333

আমার কাছে একটি docker-compose.ymlফাইল রয়েছে যাতে 4 টি ধারক রয়েছে: রেডিস, পোস্টগ্রিস, এপিআই, কর্মী

কর্মী বিকাশের সময়, পরিবর্তনগুলি প্রয়োগ করার জন্য আমাকে প্রায়শই এটি পুনরায় চালু করতে হবে। workerঅন্য পাত্রে পুনরায় আরম্ভ না করে কোনও পাত্রে পুনঃসূচনা করার কোনও ভাল উপায় আছে (উদাহরণস্বরূপ )?


2
ডকার-কম্পোজ -ফ ডকার-কমপোজ.আইএমএল রিস্টার্ট ওয়ার্কার
জিন্না বালু

উত্তর:


397

এটি খুব সহজ: কমান্ডটি ব্যবহার করুন:

docker-compose restart worker

ধারকটি মেরে ফেলার আগে অপেক্ষা করার জন্য সময় নির্ধারণ করতে পারেন (সেকেন্ডে)

docker-compose restart -t 30 worker

মনে রাখবেন যে এটি ধারকটি পুনরায় আরম্ভ করবে তবে এটি পুনর্নির্মাণ না করে। আপনি যদি নিজের পরিবর্তনগুলি প্রয়োগ করতে চান এবং পুনরায় চালু করতে চান তবে অন্যান্য উত্তরগুলি একবার দেখুন।


3
আমার জন্য এটি কাজ করেছে, তবে একটি সাধারণ প্রশ্ন যদি এখানে অনুমতি দেওয়া হয়: 'পুনরায় চালু করা' কি লিঙ্কযুক্ত পাত্রে যত্ন নেবে এবং / ইত্যাদি / হোস্টগুলি আপডেট করবে বা 'পুনঃসূচনা' করে কোন আইপি পরিবর্তন করে না?
michabbb

ধারকগুলি নাম দ্বারা লিঙ্কযুক্ত এবং সাধারণত আপনার কেবলমাত্র আইপি নিয়েই উদ্বেগ হওয়া উচিত তা হ'ল বাহ্যিক ডকার হোস্ট আইপি (সাধারণত 192.168.99.100)। যেখানে কিছুটা সমস্যা হতে পারে তা যদি আপনি বলেন, অন্যান্য পাত্রে সংযুক্ত যে ডাটাবেস ধারকটি পুনরায় চালু করুন। নির্ভরযোগ্য ধারকগুলি পুনরায় সংযোগ করার জন্য যথেষ্ট পরিমাণে স্থিতিস্থাপক হতে হবে।
রায়ান কিম্বার

20
ওপিতে বলা হয়েছে যে তাকে "পরিবর্তনগুলি প্রয়োগ করার জন্য এটি পুনরায় চালু করতে হবে"। ডক্স অনুসারে docker-compose restartকমান্ডগুলি কোনও পরিবর্তন প্রয়োগ করবে না। "আপনি যদি আপনার docker-compose.ymlকনফিগারেশনে পরিবর্তন করেন তবে এই আদেশটি চালানোর পরে এই পরিবর্তনগুলি প্রতিফলিত হয় না।" অতএব ব্যবহার docker-compose up -d --builddocs.docker.com/compose/references/restart
featherbelly

5
এনবি, কর্মচারী ইয়ামল ফাইলে পরিষেবা দেওয়া নাম এবং আপনি দৌড়ানোর সময় যে কিছুই দেখেন নাdocker ps -a
worc

2
এই অন্যান্য উত্তরটি আরও ভাল স্ট্যাকওভারফ্লো.com /a/39501539/ 292408 , কারণ restartআপনি ইতিমধ্যে একটি দৌড়ে গেলেও এটি পরিবর্তনগুলি প্রয়োগ করে না docker-compose build <container name>এবং এটি একটি অ-কার্যক্ষম / ভুল উত্তর।
ইলিয়াস লিন

170

একটি একক নোড পুনরায় চালু করার অন্যান্য উত্তরগুলি লক্ষ্যবস্তু docker-compose restart worker। এটি সেই ধারকটিকে বাউস করবে, তবে কোনও পরিবর্তন অন্তর্ভুক্ত করবে না, এমনকি যদি আপনি এটি আলাদাভাবে পুনর্নির্মাণ করেন। আপনি নিজে করতে পারেন stop, rm, create, এবং start, কিন্তু অনেক সহজ পদ্ধতি।

আপনি যদি নিজের কোড আপডেট করেছেন তবে আপনি একক ধাপে বিল্ড এবং পুনরায় লোড করতে পারেন:

docker-compose up --detach --build

এটি প্রথমে কোনও পরিবর্তিত কোড থেকে আপনার চিত্রগুলি পুনর্নির্মাণ করবে, যা ক্যাশে পুনরায় ব্যবহারের পরে কোনও পরিবর্তন না হলে দ্রুত। এবং তারপরে এটি কেবল পরিবর্তিত পাত্রে প্রতিস্থাপন করে। যদি আপনার ডাউনলোড করা চিত্রগুলি বাসি হয় তবে আপনি উপরের কমান্ডটি এর আগে করতে পারেন:

docker-compose pull

প্রথমে যে কোনও পরিবর্তিত চিত্র ডাউনলোড করতে (আপনি upউপরের মতো কমান্ড না চালিয়ে পাত্রে পুনরায় আরম্ভ করা হবে না )। প্রাথমিক স্টপ করা অপ্রয়োজনীয়।

এবং কেবলমাত্র একটি একক পরিষেবার জন্য এটি করতে, আপনি যে পরিষেবাগুলি নির্দিষ্ট করতে চান তা দিয়ে আপ বা পুল কমান্ডটি অনুসরণ করুন, যেমন:

docker-compose up --detach --build worker

এখানে প্রথম বিকল্পের একটি দ্রুত উদাহরণ দেওয়া হয়েছে, কোডের ঘন ঘন পরিবর্তিত অংশগুলি শেষের কাছে রাখার জন্য ডকফাইফাইলটি তৈরি করা হয়েছে। প্রকৃতপক্ষে প্রয়োজনীয়তাগুলি আলাদাভাবে টেনে নেওয়া হয় pip installকারণ ফাইলটি খুব কমই পরিবর্তিত হয়। এবং যেহেতু nginx এবং redis ধারকগুলি আপ টু ডেট ছিল তাই সেগুলি আরম্ভ করা হয়নি rest পুরো প্রক্রিয়াটির মোট সময়টি 6 সেকেন্ডের নিচে ছিল:

$ time docker-compose -f docker-compose.nginx-proxy.yml up --detach --build
Building counter
Step 1 : FROM python:2.7-alpine
 ---> fc479af56697
Step 2 : WORKDIR /app
 ---> Using cache
 ---> d04d0d6d98f1
Step 3 : ADD requirements.txt /app/requirements.txt
 ---> Using cache
 ---> 9c4e311f3f0c
Step 4 : RUN pip install -r requirements.txt
 ---> Using cache
 ---> 85b878795479
Step 5 : ADD . /app
 ---> 63e3d4e6b539
Removing intermediate container 9af53c35d8fe
Step 6 : EXPOSE 80
 ---> Running in a5b3d3f80cd4
 ---> 4ce3750610a9
Removing intermediate container a5b3d3f80cd4
Step 7 : CMD gunicorn app:app -b 0.0.0.0:80 --log-file - --access-logfile - --workers 4 --keep-alive 0
 ---> Running in 0d69957bda4c
 ---> d41ff1635cb7
Removing intermediate container 0d69957bda4c
Successfully built d41ff1635cb7
counter_nginx_1 is up-to-date
counter_redis_1 is up-to-date
Recreating counter_counter_1

real    0m5.959s
user    0m0.508s
sys     0m0.076s

এটি আকর্ষণীয়, তবে এটি -no-cacheবিকল্পের সাথে ব্যবহার করা যেতে পারে ? বলুন আমি আমার মধ্যে কিছু যুক্ত করেছি package.jsonএবং পুনরায় করা দরকার RUN npm installতবে এটি Dockerfileনিজেই
বদলেনি

2
@ অগাস্টিনরিঞ্জিংগার যদি আপনার ইনপুট ফাইলটি পরিবর্তন করা হয় এবং আপনি কোনও COPYকমান্ডের সাহায্যে এটি অন্তর্ভুক্ত করেন যা ক্যাশেটি স্বয়ংক্রিয়ভাবে ভেঙে যায়।
বিএমইচ

1
ধন্যবাদ। আমি মোবাইল তাই লিঙ্কিত প্রশ্নগুলি দেখতে পাচ্ছি না। আপনার প্রশ্নের পদক্ষেপগুলি থেকে COPYআপনার ডকফাইফাইলে ইতিমধ্যে একটি কমান্ড থাকা উচিত । git pullPackage.json ফাইল আপডেট হবে এবং কখন Docker আপনি কি অন্য কিছু ফাইলে কপি সূচিত বিল্ড ক্যাশে ভঙ্গ করবে।
বিএমইচ

1
ধন্যবাদ এই আচরণ সম্পর্কে জানতেন না! আমি ADDপরিবর্তে ব্যবহার করছিলাম COPYতবে আপাতদৃষ্টিতে পরেরটি একটি সেরা অনুশীলন তাই আমি এর জন্য যাব!
অগাস্টিন রিডিংগার

1
@ অগাস্টিনরিঞ্জিংয়ের ক্যাশে বুস্টের ADDমতো একই ফলাফল থাকবে COPYতবে (সেরা অনুশীলনের লিঙ্কে পরামর্শ দেওয়া হয়েছে) বেশিরভাগের অতিরিক্ত সক্ষমতা প্রয়োজন হয় না তাই আমি এটি উল্লেখ করারও দরকার নেই।
বিএমইচ

28

পরিবর্তনগুলির সাথে একটি পরিষেবা পুনরায় চালু করার জন্য আমি যে পদক্ষেপগুলি সম্পাদন করেছি তা হল:

docker-compose stop -t 1 worker
docker-compose build worker
docker-compose create worker
docker-compose start worker

10
আপনার যদি কোনও বিল্ডের সাথে প্রয়োগ করতে পরিবর্তনগুলির প্রয়োজন হয় তবে আপনি সহজেই একটি করতে পারেন docker-compose up -d --buildএবং এটি সবকিছু পুনর্নির্মাণ এবং কোনও পরিবর্তিত পাত্রে পুনরায় আরম্ভ করবে। ডাউনটাইম সহ প্রথমে স্টপের প্রয়োজন নেই, এবং আলাদাভাবে তৈরি করুন এবং শুরু করুন আদেশগুলি।
বিএমইচ

4
হ্যাঁ, আপনি যদি সমস্ত পরিষেবা পুনরায় চালু করতে চান তবে ওপি কেবল একটি পরিষেবা পুনরায় চালু করতে চায় এবং অন্যদের পুনরায় আরম্ভ করতে চায় না
জেফ

3
আমি পোস্ট করা উত্তরটি দেখুন, উদাহরণস্বরূপ, upইচ্ছাশক্তিটি কেবলমাত্র সেই ধারকটি পুনরায় তৈরি করবে যা পরিবর্তিত ছিল এবং তাই পুনরায় আরম্ভ করা দরকার।
বিএমচি

18

নিম্নলিখিত আদেশ

docker-compose restart worker

কেবল বন্ধ এবং ধারক শুরু করবে। যেমন ডকার-কম্পোজ.এক্সএমএল থেকে কোনও পরিবর্তন লোড না করে

স্টপ পিসিতে হাইবারনেটিংয়ের অনুরূপ। সুতরাং স্টপ / স্টার্ট কনফিগারেশন ফাইলের কোনও পরিবর্তন সন্ধান করবে না। ধারক (ডকার-কমপোজ.এমএমএল) এর রেসিপি থেকে পুনরায় লোড করার জন্য আমাদের ধারকটি সরিয়ে তৈরি করতে হবে (পিসি রিবুট করার অনুরূপ উপমা)

কমান্ডগুলি নিম্নলিখিত হিসাবে থাকবে

docker-compose stop worker       // go to hibernate
docker-compose rm worker        // shutdown the PC 
docker-compose create worker     // create the container from image and put it in hibernate

docker-compose start worker //bring container to life from hibernation

+1, অনেক ধন্যবাদ! জন্য rmলাইন বিকল্প -fকুশলী (কোন প্রম্পট) এবং বর্তমান Docker আসে createএবং startমার্জ করা হয় up(তাই মোট আমরা 3 কমান্ড না 4 আছে), এবং upবিকল্প -dদরকারী (মৃত্যুদন্ড পটভূমিতে থাকে)।
নভোচারী

10

ডকার-রচনা ফাইলের সাথে পরিষেবাটি পুনরায় চালু করুন

docker-compose -f [COMPOSE_FILE_NAME].yml restart [SERVICE_NAME]

কেস # 1 ব্যবহার করুন: যদি COMPOSE_FILE_NAME হয় docker-compose.ymlএবং পরিষেবা কর্মী হয়

docker-compose restart worker

কেস # 2 ব্যবহার করুন: যদি ফাইলের নাম sample.ymlএবং পরিষেবা কর্মী হয়

docker-compose -f sample.yml restart worker

ডিফল্টরূপে ডকার-কমপোজ সন্ধান করে docker-compose.ymlযদি আমরা docker-composeকমান্ডটি চালিত করি , অন্যথায় আমাদের কাছে নির্দিষ্ট ফাইলের নাম দেওয়ার পতাকা রয়েছে-f [FILE_NAME].yml


7

সাধারণ 'ডকার' কমান্ড 'কর্মী' ধারক সম্পর্কে কিছুই জানে না। এইভাবে কমান্ড ব্যবহার করুন

docker-compose -f docker-compose.yml restart worker


4
কাজ করে না - কোকার-রচনাটিতে নতুন পরিবর্তনগুলি.আইএমএল পুনঃসূচনাতে প্রয়োগ করা হয়নি
খুশি

3

ধারক পুনরায় আরম্ভ করুন

আপনি যদি কেবল নিজের ধারকটি পুনরায় চালু করতে চান:

docker-compose restart servicename

এই কমান্ডটিকে "কেবলমাত্র তার নাম দিয়ে ধারকটি পুনরায় চালু করুন" হিসাবে ভাবেন, যা docker restartআদেশের সমতুল্য ।

নোট সাবধান:

  1. আপনি যদি ENV ভেরিয়েবলগুলি পরিবর্তন করেন তবে সেগুলি ধারকটিতে আপডেট হবে না। আপনার এটি বন্ধ করে আবার শুরু করা দরকার। অথবা, একক কমান্ড ব্যবহার করা docker-compose upপরিবর্তনগুলি সনাক্ত করতে পারে এবং ধারকটি পুনরায় তৈরি করবে।

  2. অন্য অনেকে উল্লিখিত হিসাবে, আপনি যদি docker-compose.ymlফাইল নিজেই পরিবর্তন করেন তবে সাধারণ পুনঃসূচনা এই পরিবর্তনগুলি প্রয়োগ করে না।

  3. আপনি যদি বিল্ড স্টেজে (আপনার Dockerfileব্যবহার ADDবা COPYআদেশের ক্ষেত্রে) কনটেইনারটির ভিতরে আপনার কোড অনুলিপি করেন তবে প্রতিবার কোড পরিবর্তন হলে আপনাকে ধারকটি পুনর্নির্মাণ করতে হবে ( docker-compose build)।

আপনার কোডের সাথে সম্পর্ক

docker-compose restartপুরোপুরি সূক্ষ্মভাবে কাজ করা উচিত, যদি আপনার কোডটি ভলিউম নির্দেশের মাধ্যমে ধারকটিতে পঠিত করে docker-compose.ymlতবে:

services:

  servicename:
    volumes:
      - .:/code

তবে আমি লাইভ কোড পুনরায় লোডিং ব্যবহার করার পরামর্শ দেব, যা সম্ভবত আপনার পছন্দসই কাঠামো দ্বারা ডিইবিইউজি মোডে সরবরাহ করা হয়েছে (বিকল্প হিসাবে, আপনি নিজের পছন্দের ভাষাতে অটো-লোড প্যাকেজগুলির সন্ধান করতে পারেন)। এটি যুক্ত করা আপনার কোড পরিবর্তনের পরে প্রতিটি সময় ধারকটি পুনরায় আরম্ভ করার প্রয়োজনটি বাদ দেয়, পরিবর্তে প্রক্রিয়াটি ভিতরে পুনরায় লোড করে।


1

উত্তরগুলি এখানে ডকার-কমপোজ.আইএমএল ফাইলটিতে পরিবর্তনের প্রতিচ্ছবি সম্পর্কে কথা বলছে।

তবে আমি যদি আমার কোডটিতে আমার যে পরিবর্তনগুলি করেছি তা অন্তর্ভুক্ত করতে চাই এবং আমি বিশ্বাস করি যে কেবলমাত্র চিত্র পুনর্নির্মাণের মাধ্যমেই সম্ভব হবে এবং আমি নিম্নলিখিত আদেশগুলি দিয়ে যা করব

1. ডকার ধারক স্টপ

docker stop container-id

2. ডকার পাত্রে অপসারণ

docker rm container-id

3. ডকার ইমেজ অপসারণ

docker rmi image-id

৪. আবার ধারকটি রচনা করুন

docker-compose up container-name
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.