উত্তর:
যখন আমরা ব্যবহার করি crontab
বা অবহেলিত /etc/rc.local
ফাইলটি ব্যবহার করি তখন sleep 10
সিস্টেম পরিষেবাদি উপলব্ধ কিনা তা নিশ্চিত করার জন্য আমাদের একটি বিলম্ব (যেমন মেশিনের উপর নির্ভর করে) প্রয়োজন। সাধারণত, systemd
(বা upstart
) সিস্টেম বুট হওয়ার পরে কোন পরিষেবাগুলি শুরু হয় তা পরিচালনা করতে ব্যবহৃত হয়। আপনি এটির জন্য অনুরূপ কনফিগারেশন ব্যবহার করার চেষ্টা করতে পারেন:
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
[Install]
WantedBy=multi-user.target
অথবা, আপনি যদি -d
পতাকা ছাড়াই দৌড়াতে চান :
# /etc/systemd/system/docker-compose-app.service
[Unit]
Description=Docker Compose Application Service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/srv/docker
ExecStart=/usr/local/bin/docker-compose up
ExecStop=/usr/local/bin/docker-compose down
TimeoutStartSec=0
Restart=on-failure
StartLimitIntervalSec=60
StartLimitBurst=3
[Install]
WantedBy=multi-user.target
WorkingDirectory
আপনার ডকারাইজড প্রকল্পের পথের সাথে প্যারামিটারটি পরিবর্তন করুন । এবং পরিষেবাটি স্বয়ংক্রিয়ভাবে শুরু করতে সক্ষম করুন:
systemctl enable docker-compose-app
systemctl start docker-compose-app
এবং systemctl status docker-compose-app
আপনি যা খুঁজছেন তা আমি ভাবি।
systemctl start docker-compose-app
Job for docker-compose-app.service failed because the control process exited with error code. See "systemctl status docker-compose-app.service" and "journalctl -xe" for details
service docker-compose-app start
স্ট্যাটাস, সাথে service docker-compose-app status
থেমেservice docker-compose-app stop
আপনার যোগ করতে সক্ষম হওয়া উচিত:
restart: always
ডকার-কমপোজ.আইএমএল ফাইলটিতে আপনি পুনঃসূচনা করতে চান এমন প্রতিটি পরিষেবায়
restart: always
কিছু গুরুতর বাগ রয়েছে: উদাহরণস্বরূপ রিবুটটিতে হোস্ট মাউন্টগুলি সংযুক্ত করা হবে না। আমার মতে, যদি বিদ্যমান চাকাটি বর্গক্ষেত্র হয়, তবে চাকাটি পুনরায় উদ্ভাবন করা ভাল।
যদি আপনার docker.service
সিস্টেম শুরুতে সক্ষম হয় enabled
$ sudo systemctl enable docker
এবং আপনার পরিষেবাগুলিতে docker-compose.yml
আছে
restart: always
আপনি কেবল একবার কমান্ডের নীচে চলে গেলে আপনি যখন সিস্টেমটি পুনরায় বুট করেন তখন সমস্ত পরিষেবা চালিত হয়
docker-compose up -d
আমি চেষ্টা করেছি restart: always
, এটি কিছু ধারক (যেমন পিএইচপি-এফপিএম) এ কাজ করে, তবে আমি এমন সমস্যার মুখোমুখি হয়েছি যে কিছু পাত্রে (এনজিনেক্সের মতো) এখনও পুনরায় বুট করার পরে পুনরায় আরম্ভ হচ্ছে না।
সমস্যার সমাধান.
crontab -e
@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&
পুনঃসূচনাটি ব্যবহার করুন : সর্বদা আপনার ডকার রচনা ফাইলটিতে।
Docker-compose up -d
আবার চিত্র থেকে ধারক চালু করা হবে। docker-compose start
থামানো পাত্রে শুরু করতে ব্যবহার করুন , এটি চিত্র থেকে নতুন পাত্রে কখনই আরম্ভ করে না।
nginx:
restart: always
image: nginx
ports:
- "80:80"
- "443:443" links:
- other_container:other_container
এছাড়াও আপনি ডকার ফাইলে কোড আপ লিখতে পারেন যাতে এটি অন্য তৈরির পাত্রে নির্ভরতা থাকলে প্রথমে তৈরি হয়।
always
, তবে হতে পারে unless-stopped
। অন্যান্য বিকল্পগুলি হ'ল on-failure
এবং no
। এটি পুনঃসূচনা নীতি হিসাবে পরিচিত ।
user39544
এর উত্তরের সংযোজন হিসাবে আরও একটি ধরণের সিনট্যাক্স crontab -e
:
@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d
crontab -e
ইউজার পাই হিসাবে দৌড়েছি , পাই দলের সাথে একটি গ্রুপের ডকের সদস্য ...
--restart always
বা--restart unless-stopped
বা Docker-compose.yml ব্যবহারেrestart: always
-> সূত্র । তবে কিছু পাত্রে হয়তো কাজ হয়নি!