Avvio di docker-compose con systemd su ubuntu 15.04


10

Ho un progetto composto da docker che vorrei controllare tramite systemd. All'inizio, userei uno script simile al seguente:

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

(sopra adattato da qui )

Tuttavia, ora sono in esecuzione su un docker host che esegue Ubuntu 15.04, che è passato a systemd. Come posso fare quanto sopra come script di servizio systemd? Il semplice avvio del demone comporre docker non consentirà a systemd di tracciare e riavviare in caso di errore.

Ecco quello che ho finora:

[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

Risposte:


11

Suggerisco di rimuovere l' -dopzione. In questo caso non è necessario eseguire i contenitori in background.


6

Ho scoperto che: l'autore utilizza un approccio simile al tuo http://trackless.ca/2015/12/21/docker-compose-meets-systemd/ . Ma crea anche un servizio systemd per ciascun servizio di composizione docker.

Potresti considerare di convertire il tuo file comporre docker in più file di servizio systemd per sbarazzarti della dipendenza comporre docker: http://container-transform.readthedocs.org/ Ho usato questo approccio, funziona bene per semplici configurazioni.


1
potresti voler aggiungere alcune informazioni aggiuntive dai link nella tua risposta, i link tendono a non funzionare dopo qualche tempo.
Dennis Nolte,

1
infatti, il collegamento non funziona più ^^.
christophe31,

Ecco un collegamento Internet Archive al primo post del blog: web.archive.org/web/20161105135126/http://trackless.ca/2015/12/…
pdoherty926

0

Prova questo, ho trovato nel mio test, richiede più tempo del normale servizio per l'avvio o l'arresto.

[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
penso che dovresti usare WorkingDirectory. docker-compose utilizza la directory di lavoro corrente per caricare i file .env WorkingDirectory = / projects / my_server anche ExecStart = / usr / local / bin / docker-compose up
Mohammadalijf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.