সিস্টেম স্টার্ট আপ-এ ডকার-রচনা-আপ কীভাবে চালানো যায়?


114

প্রারম্ভকালে পাত্রে অটোস্টার্ট করতে, আমি কমান্ডটি যুক্ত করার চেষ্টা করেছি:

cd directory_has_docker-compose.yml && docker-compose up -d /etc/rc.local এ।

তবে তারপরে আমি মেশিনটি রিবুট করার পরে, পাত্রে কাজ হয় না।

docker-compose up -dসিস্টেম চালানো কিভাবে ?


3
ব্যবহার --restart alwaysবা --restart unless-stoppedবা Docker-compose.yml ব্যবহারে restart: always-> সূত্র । তবে কিছু পাত্রে হয়তো কাজ হয়নি!
বেনিয়ামিন জাফারি

উত্তর:


129

যখন আমরা ব্যবহার করি 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

এটি যদি রাস্পবেরি পুনরায় চালু না করে কাজ করে তবে পরীক্ষার কোনও সহজ উপায় আছে?
dmigo

2
এটি সবচেয়ে মার্জিত উত্তর আইএমও
kuzyn

2
@ ডিমিগো 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
এটির

1
@ ডমিগো: এর সাথে আপনার পরিষেবার পরীক্ষার সূচনা:, সাথে service docker-compose-app startস্ট্যাটাস, সাথে service docker-compose-app statusথেমেservice docker-compose-app stop
ব্যারিপেই

96

আপনার যোগ করতে সক্ষম হওয়া উচিত:

restart: always 

ডকার-কমপোজ.আইএমএল ফাইলটিতে আপনি পুনঃসূচনা করতে চান এমন প্রতিটি পরিষেবায়


6
মনে রাখবেন যে একটি পুনরায় বুট হওয়ার পরে এগুলি চলতে হবে, তাই পুনরায় বুট করার আগে ম্যানুয়ালি এগুলি বন্ধ করবেন না।
টম

কিছু পরিষেবা যেমন Nginx এমনকি এই বিকল্পের সাথে শুরু হয় না।
বেনিয়ামিন জাফারি

15
এটি প্রশ্নের সঠিক উত্তর। পাত্রে পুনরায় চালু করার একটি নকশাকৃত উপায় রয়েছে, ক্রোন চাকরিতে কেন প্রবেশ করা এবং চাকাটি পুনরায় উদ্ভাবনের অন্যান্য উপায়।
তাহা রেহমান সিদ্দিকী

এটি সঠিক উত্তর। আপনি যখন ক্রোন পরিবর্তে কুবারনেটস ব্যবহার শুরু করেন, আপনি এটি ব্যবহার করে খুশি হবেন।
পেফারেল

9
@ তাহারহেনসিদ্দিকী নোট যাতে restart: alwaysকিছু গুরুতর বাগ রয়েছে: উদাহরণস্বরূপ রিবুটটিতে হোস্ট মাউন্টগুলি সংযুক্ত করা হবে না। আমার মতে, যদি বিদ্যমান চাকাটি বর্গক্ষেত্র হয়, তবে চাকাটি পুনরায় উদ্ভাবন করা ভাল।
Okdewit

73

যদি আপনার docker.serviceসিস্টেম শুরুতে সক্ষম হয় enabled

$ sudo systemctl enable docker

এবং আপনার পরিষেবাগুলিতে docker-compose.ymlআছে

restart: always

আপনি কেবল একবার কমান্ডের নীচে চলে গেলে আপনি যখন সিস্টেমটি পুনরায় বুট করেন তখন সমস্ত পরিষেবা চালিত হয়

docker-compose up -d

2
এটি সবচেয়ে মার্জিত সমাধান হওয়া উচিত
কার্ল চিউং

34

আমি চেষ্টা করেছি restart: always, এটি কিছু ধারক (যেমন পিএইচপি-এফপিএম) এ কাজ করে, তবে আমি এমন সমস্যার মুখোমুখি হয়েছি যে কিছু পাত্রে (এনজিনেক্সের মতো) এখনও পুনরায় বুট করার পরে পুনরায় আরম্ভ হচ্ছে না।

সমস্যার সমাধান.

crontab -e

@reboot (sleep 30s ; cd directory_has_dockercomposeyml ; /usr/local/bin/docker-compose up -d )&

2
কেন এই উত্তরের জন্য ডাউনটায়েট? উত্তরটি কি কার্যকর নয়? এটা কোন অর্থে ভুল? একটি মন্তব্য উত্তরদাতাকে এবং অন্যদের কী ভুল তা জানাতে কার্যকর হবে।
আয়ুষ্যা


এক্ষেত্রে জিওরজিওসিরনির ঘুম ঠিক আছে। ধারক স্টার্ট-আপ অবশ্যই যাইহোক ননডেটারিস্টিক আচরণ পরিচালনা করতে সক্ষম হবে।
z0r

4
এটি 30 সেকেন্ড পর্যন্ত বিলম্বের প্রবর্তন করছে যা প্রয়োজন হতে পারে না।
জিওরজিওসিরোনি

@ z0r ঘুম ঠিক নেই! ঘুম "কাজ" করতে পারে তবে যে কোনও প্রারম্ভিক ক্রমটি হ'ল নির্দোষ minist লিনাক্স পরিষেবাগুলি নেটওয়ার্কের মতো জিনিসগুলি উপলভ্য হওয়ার আগে ইত্যাদি নির্ভর করার জন্য ব্যবহার করে। আপনারও একই কাজ করা উচিত।
colm.anseo

25

পুনঃসূচনাটি ব্যবহার করুন : সর্বদা আপনার ডকার রচনা ফাইলটিতে।

Docker-compose up -dআবার চিত্র থেকে ধারক চালু করা হবে। docker-compose startথামানো পাত্রে শুরু করতে ব্যবহার করুন , এটি চিত্র থেকে নতুন পাত্রে কখনই আরম্ভ করে না।

nginx:   
    restart: always   
    image: nginx   
    ports:
      - "80:80"
      - "443:443"   links:
      - other_container:other_container

এছাড়াও আপনি ডকার ফাইলে কোড আপ লিখতে পারেন যাতে এটি অন্য তৈরির পাত্রে নির্ভরতা থাকলে প্রথমে তৈরি হয়।


1
আপনি ব্যবহার করতে নাও চান always, তবে হতে পারে unless-stopped। অন্যান্য বিকল্পগুলি হ'ল on-failureএবং no। এটি পুনঃসূচনা নীতি হিসাবে পরিচিত ।
পল

5

user39544এর উত্তরের সংযোজন হিসাবে আরও একটি ধরণের সিনট্যাক্স crontab -e:

@reboot sleep 60 && /usr/local/bin/docker-compose -f /path_to_your_project/docker-compose.yml up -d

এটি আমার জন্য মার্চ 2018 সালে একটি আরপিআই 3 চলমান রাস্পিয়ানতে কাজ করেছিল। আমি crontab -eইউজার পাই হিসাবে দৌড়েছি , পাই দলের সাথে একটি গ্রুপের ডকের সদস্য ...
স্কট ভায়ার্স
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.