উবুন্টু 15.04 এ সিস্টেমেড দিয়ে ডকার-কমপোজ শুরু করা


10

আমার কাছে একটি ডকার-রচনা প্রকল্প রয়েছে যা আমি সিস্টেমডের মাধ্যমে নিয়ন্ত্রণ করতে চাই। আপস্টার্টে, আমি এমন স্ক্রিপ্ট ব্যবহার করব যা দেখতে এরকম দেখাচ্ছে:

description "Start/Stop server"
author "Jim Cortez"

start on filesystem and started docker
stop on runlevel [!2345]

respawn limit 3 240

pre-start script
    # wait (if necessary) for our docker context to be accessible
    while [ ! -f /projects/my_server/docker-compose.yml ]
    do
      sleep 1
    done
    /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
end script

script
    sleepWhileAppIsUp(){
        while docker ps | grep "$1" >/dev/null; do
            sleep 2
        done
    }

    sleepWhileAppIsUp "my_server"
end script

# stop docker container after the stop event has completed
post-stop script
    if docker ps | grep my_server;
    then
        /usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop
    fi
end script

(উপরে থেকে এখান থেকে অভিযোজিত )

যাইহোক, আমি এখন একটি ডকার হোস্টে চলছি যা উবুন্টু 15.04 চালায়, যা সিস্টেমডে স্যুইচ করেছে। সিস্টেমড সার্ভিস স্ক্রিপ্ট হিসাবে আমি কীভাবে উপরেরটি করতে পারি? কেবল ডকার-কমপোজ ডেমন চালু করা ব্যর্থতার ক্ষেত্রে সিস্টেমেডটিকে ট্র্যাক এবং পুনরায় আরম্ভ করার অনুমতি দেবে না।

আমার এখন পর্যন্ত যা আছে তা এখানে:

[Unit]
Description=My Server container
Requires=docker.service
After=docker.service

[Service]
Restart=always
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up -d
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml stop

[Install]
WantedBy=local.target

উত্তর:


11

আমি -dবিকল্পটি সরিয়ে দেওয়ার পরামর্শ দিচ্ছি । এক্ষেত্রে আপনার পটভূমিতে পাত্রে চালানোর দরকার নেই।


6

আমি দেখেছি যে: লেখক হিসাবে আপনি একটি অনুরূপ পদ্ধতির ব্যবহার http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ । তবে অতিরিক্তভাবে তিনি প্রতিটি ডকর-রচনা পরিষেবাদির জন্য একটি সিস্টেমড সার্ভিস তৈরি করেন।

ডকার-রচনা নির্ভরতা থেকে মুক্তি পেতে আপনি আপনার ডকার-কমপোজ ফাইলটিকে একাধিক সিস্টেমেড সার্ভিস ফাইলে রূপান্তর করতে বিবেচনা করতে পারেন: http://container-transform.readthedocs.org/ আমি এই পদ্ধতির ব্যবহার করেছি, এটি সহজ সেটআপগুলির জন্য সূক্ষ্ম কাজ করে।


1
আপনি আপনার উত্তরে লিঙ্কগুলি থেকে কিছু অতিরিক্ত তথ্য রাখতে চাইবেন, লিঙ্কগুলি কিছু সময়ের পরে কাজ করবে না।
ডেনিস নোল্টে

1
আসলে, লিঙ্কটি আর কাজ করে না work।
খ্রিস্টোফের

এখানে প্রথম ব্লগ পোস্টের একটি ইন্টারনেট সংরক্ষণাগার লিঙ্ক: web.archive.org/web/20161105135126/http://trackless.ca/2015/12/…
pdoherty926

0

এটি ব্যবহার করে দেখুন, আমি আমার পরীক্ষায় এটি পেয়েছি, এটি শুরু করতে বা থামাতে স্বাভাবিক পরিষেবার চেয়ে বেশি সময় প্রয়োজন।

[Unit]
Description=My Server container
Requires=docker.service
After=network.target docker.service

[Service]
#Restart=always
Type=simple
WorkingDirectory=/projects/my_server
ExecStart=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml up
ExecStop=/usr/local/bin/docker-compose -f /projects/my_server/docker-compose.yml down

[Install]
WantedBy=multi-user.target

1
আমার মনে হয় আপনার ওয়ার্কিং ডিরেক্টরী ব্যবহার করা উচিত। ডকার-কমপোজ .এনভি ফাইলগুলি লোড করার জন্য বর্তমান ওয়ার্কিং ডিরেক্টরি ব্যবহার করে ওয়ার্কিং ডাইরেক্টরি = / প্রকল্পগুলি / মাই_সার্ভার এছাড়াও এক্সিকিস্টার্ট = / ইউএসআর / লোকাল / বিন / ডকার-কমপোজ
মোহাম্মদালিজফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.