উত্তর:
যখন আমরা ব্যবহার করি 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-appJob 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-> সূত্র । তবে কিছু পাত্রে হয়তো কাজ হয়নি!