আমি কীভাবে একটি ডকার পাত্রে সিস্টেম বুটে স্বয়ংক্রিয়ভাবে শুরু করব?


102

মনে হচ্ছে আমার কাছে একটি ডকার ধারক আছে যা আমি চালাতে চাই, তারপরে আমি কল করতে পারি

$ docker run ...

এবং সবকিছু ঠিক আছে। সিস্টেমটি ক্র্যাশ হয়ে পুনরায় চালু হয়ে থাকলে কোনও কনটেইনারটি এমনভাবে চালানোর কোনও অন্তর্নির্মিত উপায় আছে যা স্বয়ংক্রিয়ভাবে পুনরায় চালু হবে?

যদি তা হয় তবে এটি কি ডকার রচনায় পাওয়া যায়?

উত্তর:


126

হ্যাঁ, Docker হয়েছে পুনর্সূচনা নীতি যেমন docker run --restart=alwaysযে এই হ্যান্ডেল করবে। এটাও পাওয়া যায় compose.yml কনফিগ ফাইল হিসাবে restart: always


24
এটি প্রথম এবং স্বীকৃত উত্তর, তবে সম্ভবত সেই বৈশিষ্ট্যটির সন্ধানকারী বেশিরভাগ লোকেরা সত্যই তাদের পরিষেবাটিকে পরিষেবা হিসাবে চালাতে চান। ব্যবহার @kon এর উত্তর Systemdসেবা পরিচালক হিসেবে যে উদ্দেশ্যে সেরা সমাধান এক এবং আরো upvotes প্রয়োজন।
রুমি বেকেরাস

4
এটি আমার রূপে কাজ করে নি। আমি একটি ধারক "crmpicco-MySQL" বলা আছে এবং আমি দৌড়ে docker run --restart=always crmpicco-mysqlএবং আমি ত্রুটিটি পেয়েছিলেন: Unable to find image 'crmpicco-mysql:latest' locally
crmpicco

4
আপনার ত্রুটিটি সম্পর্কিত নয়। আপনি একটি পৃথক প্রশ্ন পোস্ট করতে চাইতে পারেন তবে মনে হচ্ছে আপনি ডোকর চিত্রের নাম এবং ডকারের ধারকের নাম গুলিয়ে ফেলছেন। docker runকমান্ড একটি চিত্র যা আপনি মাধ্যমে তালিকাবদ্ধ করতে পারেন নাম আশা docker images
পিটার লিয়নস

11
এটির সাথে একমাত্র সমস্যাটি হ'ল "সর্বদা" ত্রুটিজনিত কারণে (ডক্স দেখুন) বন্ধ হয়ে যাওয়ার পরে কন্টেইনারটিও অসীমভাবে পুনরায় চালু করবে। এমন একটি নীতি থাকতে হবে যা কেবলমাত্র ডেমন-স্টার্ট দিয়ে শুরু হয়
হারিয়ে গেছে

4
আমি ভেবেছিলাম ধারক / ডকারের অন্যতম প্রধান বিক্রয় পয়েন্ট হ'ল আমার প্রতিটি পরিষেবা সিস্টেমে ইনস্টল করা এবং পরিচালনা করার দরকার নেই (যা কোনও ব্যথা হতে পারে)।
মার্ক

133

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

$ docker pull alexeiled/docker-oracle-xe-11g
$ docker run -d --name=MYPROJECT_oracle_db --shm-size=2g -p 1521:1521 -p 8080:8080 alexeiled/docker-oracle-xe-11g
$ vim /etc/systemd/system/docker-MYPROJECT-oracle_db.service

এবং নিম্নলিখিত সামগ্রী যুক্ত করুন:

[Unit]
Description=Redis container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a MYPROJECT_oracle_db
ExecStop=/usr/bin/docker stop -t 2 MYPROJECT_oracle_db

[Install]
WantedBy=default.target

এবং শুরুতে পরিষেবা সক্ষম করুন

sudo systemctl enable docker-MYPROJECT-oracle_db.service

আরও তথ্যের জন্য https://docs.docker.com/engine/admin/host_integration/


8
ডকার-কম্পোজের সাহায্যে যারা এটি দেখতে চায়, আপনি dockerdocker-compose-f/usr/bin/docker-compose -f /path/to/docker-compose.yml up
ডিকার

4
@ Charlesreid1 যা বলেছে তা জুড়তে, যদি আপনি docker-compose.ymlকোনও .envফাইল নির্দিষ্ট করে থাকেন তবে আপনার ডকার কমপোজ ফাইলটি স্পষ্ট করে নির্দিষ্ট --project-directory /path/to করার জন্য ব্যবহার করুন।
whlteXbread

4
ডকারের লগ সিস্টেম এবং প্রক্রিয়া পরিচালক রয়েছে। এটি দুর্ভাগ্যজনক যে এর সঠিক পুনঃসূচনা নীতি নেই।
ফ্রাঙ্কলিন ইউ

উইন্ডোজ সার্ভারে এটি কিভাবে করবেন কোনও ধারণা? আমি লগইন না করে আমি ডকার চালাতে পারি না ...
অ্যালেক্স লর্ড মোর্ডার

এটি কারওর কাছে আকর্ষণীয়ও হতে পারে যে একটি সহায়ক [Unit]নির্দেশিকা বলা হয়েছিল Before=। বিশেষত ডাটাবেস পরিচালনা সিস্টেমের মতো জিনিস শুরু করার সময়, নির্দিষ্ট অন্যান্য পরিষেবার আগে এটি শুরু হয়েছে তা নিশ্চিত করে নেওয়া সহায়ক হতে পারে ।
মীখা

88

ডিফল্ট পুনর্সূচনা নীতি হয় no

তৈরি পাত্রে docker updateপুনঃসূচনা নীতি আপডেট করতে ব্যবহার করুন ।

docker update --restart=always 0576df221c0b

0576df221c0b কনটেইনার আইডি


না alwaysমানে এমনকি যদি ধারক পুনরায় চালু হবে আমি আর তা থামবে? অবশ্যই এই ধরণের অবিরাম শুরু ছাড়াই পুনরায় বুট করার একটি ধারক পুনরায় চালু করার উপায় আছে ...
মার্ক

4
@ মার্ক: না ডকুমেন্টেশন দেখুন :If you manually stop a container, its restart policy is ignored until the Docker daemon restarts or the container is manually restarted. This is another attempt to prevent a restart loop.
সেক্স

12

আপনি ব্যবহার করতে পারেন docker update --restart=on-failure <container ID or name>

নামটি যা বলেছে তার উপরে, on-failureকেবলমাত্র ব্যর্থতার পরে ধারকটি পুনরায় আরম্ভ করবে না, এটি সিস্টেম বুটেও।

প্রতি ডকুমেন্টেশন , সেখানে একাধিক পুনর্সূচনা বিকল্পগুলি হল:

Flag            Description
no              Do not automatically restart the container. (the default)
on-failure      Restart the container if it exits due to an error, which manifests as a non-zero exit code.
always          Always restart the container if it stops. If it is manually stopped, it is restarted only when Docker daemon restarts or the container itself is manually restarted. (See the second bullet listed in restart policy details)
unless-stopped  Similar to always, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker daemon restarts.

4
দস্তাবেজটিতে এটি উল্লেখ করা হয়নি বিবেচনা করে ওয়াও ভাল কাজ এটি আবিষ্কার করছে। আমার জন্য নিখুঁত সমাধান।
ক্যামেরন হাডসন

অন-ব্যর্থতা ব্যবহারের বিষয়ে একটি বিষয় লক্ষণীয়, যদি আপনার কাছে এমন একটি ধারক থাকে যা ইতিমধ্যে অন্য চলমান উপর নির্ভর করে তবে এটি একটি "আর্ট অর্ডার" বলে মনে হয় না, তাই কোনওটি শুরু হতে পারে এবং অবিলম্বে ব্যর্থ হতে পারে এবং কখনই ওএস বুট শুরু না করে
21

8

ডকুমেন্টেশন থেকে আরও "ভদ্র" মোড:

docker run -dit --restart unless-stopped <image_name>

4
দুর্ভাগ্যক্রমে, যখন ডকার ডিমনটি পুনরায় বুট করার মাধ্যমে বন্ধ করা হয়, তখন ডিমনগুলি পাতাগুলি "থামিয়ে" দেয়, সেগুলি বন্ধ হিসাবে চিহ্নিত করে। তারপরে যখন সিস্টেম বুট হয়, এটি আসলে এগুলি শুরু করে না। এটা বোবা। এখানে বাগটি রয়েছে: github.com/docker/for-linux/issues/652
mlissner

7

1) প্রথমত, আপনাকে অবশ্যই বুটে ডকার পরিষেবা সক্ষম করতে হবে

$ sudo systemctl enable docker

2) তারপরে আপনার যদি ডকার-কমপোজ। জিল ফাইল অ্যাড থাকে restart: alwaysবা আপনার কাছে ডকারের ধারক যুক্ত থাকে তবে পুনরায় শুরু করুন = সর্বদা এটি পছন্দ করুন:

docker run --restart=always এবং ডকারের ধারক চালান

নিশ্চিত করা

আপনি যদি কোনও ম্যানুয়ালি ম্যানুয়ালি থামান, ডকার ডিমন পুনরায় আরম্ভ না করা বা ধারকটি ম্যানুয়ালি পুনরায় আরম্ভ না করা অবধি তার পুনঃসূচনা নীতি উপেক্ষা করা হবে।

ডকার অফিসিয়াল পৃষ্ঠায় এই পুনঃসূচনা নীতিটি দেখুন

3) আপনি যদি ডকার-রচনাটি শুরু করতে চান তবে আপনার সিস্টেমটি পুনরায় বুট করার সময় সমস্ত পরিষেবা চালু থাকে সুতরাং আপনি কেবল একবার কমান্ডের নীচে একবার চালাবেন once

$ docker-compose up -d

2

ক্রোনটব এটির জন্য:

@reboot sleep 10 ; docker start <container name> 2>&1 | /usr/bin/logger -t 'docker start'

আপনার ব্যবহারকারী ক্রন্টব দ্বারা অ্যাক্সেস করুন crontab -eবা এটির সাথে প্রদর্শিত crontab -lবা আপনার সিস্টেম ক্রন্টব এ সম্পাদনা করুন/etc/crontab


ডকার সার্ভিসের আগে ক্রোন সার্ভিসটি কী শুরু হয় ... এই ক্ষেত্রে এটি ব্যর্থ হবে ...
আখিল জালাগাম

4
অখিলজালগাম আমি নিশ্চিত নই যে আপনার সমস্যাটি আমি বুঝতে পেরেছি। "স্লিপ 10" ক্রন্ড শুরু হওয়ার জন্য প্রচুর সময় দেয়, তারপরে সিস্টেম বুট / রিবুটের পরে ধারকটি শুরু করে। এই পদ্ধতিটি শুরু করার আগে লগইন করার জন্য কারও প্রয়োজন নেই এবং অগোছালো, জটিল সিস্টেমড সার্ভিস ইউনিটগুলি এড়িয়ে চলে। সিস্টেমেড সার্ভিস ইউনিট পদ্ধতিটি আমার উদাহরণের চেয়ে আরও বেশি কড়া বোধ করে।
ট্র্যাভিস রানইয়ার্ড

2

আপনি এমন একটি ধারক চালাতে পারেন যা সর্বদা এটি পুনঃসূচনা করে:

$ docker run -dit --restart unless-stopped <image name OR image hash>

আপনি যদি কোনও চলমান ধারকটির কনফিগারেশন পরিবর্তন করতে চান তবে আপনার এটি আপডেট করা উচিত :

$ docker update --restart=<options> <container ID OR name>

এবং আপনি যদি ধারকটির বর্তমান নীতি দেখতে চান তবে উপরের আগে নীচের কমান্ডটি প্রথম স্থানে চালনা করুন:

docker inspect gateway | grep RestartPolicy -A 3

সর্বোপরি, ইনস্টলড ডকার ডিমনকে সিস্টেম বুটে সক্ষম করতে ভুলে যাবেন না :

$ systemctl enable docker

পুনঃসূচনা নীতিগুলির একটি সম্পূর্ণ তালিকা দেখতে, দেখুন: নীতিগুলি পুনরায় চালু করুন


1

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

সুতরাং, আমি সবেমাত্র একটি নির্ধারিত টাস্ক তৈরি করেছি যা সিস্টেম বুটে চালু হয়। এই টাস্কটি কেবল "উইন্ডোজ.এক্সই জন্য ডকার" শুরু করে (বা আপনার ডকার নির্বাহযোগ্য এর নাম যাই হোক না কেন)।

তারপরে, "সর্বদা" পুনঃসূচনা নীতি সহ সমস্ত ধারক শুরু হবে।

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