Mulai docker-compose dengan systemd di ubuntu 15.04


10

Saya memiliki proyek pembuatan docker yang ingin saya kendalikan melalui systemd. Di pemula, saya akan menggunakan skrip yang terlihat seperti ini:

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

(di atas diadaptasi dari sini )

Namun, sekarang saya menjalankan host docker yang menjalankan Ubuntu 15.04, yang telah beralih ke systemd. Bagaimana saya bisa melakukan di atas sebagai skrip layanan systemd? Cukup meluncurkan daemon docker-compose tidak akan memungkinkan systemd untuk melacak dan memulai kembali jika terjadi kegagalan.

Inilah yang saya miliki sejauh ini:

[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

Jawaban:


11

Saya sarankan menghapus -dopsi. Anda tidak perlu menjalankan kontainer di latar belakang dalam kasus ini.


6

Saya menemukan bahwa: Penulis menggunakan pendekatan yang sama seperti Anda http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ . Tapi selain itu ia menciptakan satu layanan systemd untuk setiap layanan pembuatan docker.

Anda dapat mempertimbangkan untuk mengonversi file pembuat galangan Anda menjadi beberapa file layanan systemd untuk menghilangkan dependensi pembuat galat : http://container-transform.readthedocs.org/ Saya menggunakan pendekatan itu, berfungsi dengan baik untuk pengaturan sederhana.


1
Anda mungkin ingin memasukkan beberapa informasi tambahan dari tautan dalam jawaban Anda, tautan cenderung tidak berfungsi setelah beberapa waktu.
Dennis Nolte

1
memang, tautannya tidak berfungsi lagi ^^.
christophe31

Berikut ini adalah tautan Internet Archive ke posting blog pertama: web.archive.org/web/20161105135126/http://trackless.ca/2015/12/…
pdoherty926

0

Coba ini, saya temukan dalam pengujian saya, itu membutuhkan lebih banyak waktu daripada layanan normal untuk memulai atau berhenti.

[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
saya pikir Anda harus menggunakan WorkingDirectory. susunan buruh pelabuhan menggunakan direktori kerja saat ini untuk memuat file .env WorkingDirectory = / projects / my_server juga ExecStart = / usr / local / bin / susunan buruh pelabuhan
Mohammadalijf
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.