Ubuntu 15.04 पर systemd के साथ docker-compose शुरू करना


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

( यहां से ऊपर अनुकूलित )

हालाँकि, मैं अब एक डॉक्यूमर होस्ट पर चल रहा हूं जो Ubuntu 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
वास्तव में, लिंक अब और नहीं काम ^ ^।
क्रिस्टोफ

यहां पहले ब्लॉग पोस्ट के लिए एक इंटरनेट आर्काइव लिंक दिया गया है: 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
मुझे लगता है कि आपको WorkingDirectory का उपयोग करना चाहिए। docker-compose लोड करने के लिए वर्तमान वर्किंग डाइरेक्टरी का उपयोग करते हैं ।env फ़ाइलें वर्कडायरेक्टरी = / प्रोजेक्ट्स / my_server भी ExecStart = / usr / लोकल / बिन / डॉक-कंपोज़ करें
Mohammadalijf
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.