Iniciando o docker-compose com o systemd no ubuntu 15.04

9

Eu tenho um projeto docker-compose que gostaria de controlar por meio do systemd. No começo, eu usaria um script assim:

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

(adaptado acima de aqui )

No entanto, agora estou executando em um host docker que executa o Ubuntu 15.04, que mudou para o systemd. Como posso fazer o acima como um script de serviço do systemd? Simplesmente iniciar o daemon docker-compose não permitirá que o systemd rastreie e reinicie em caso de falha.

Aqui está o que eu tenho até agora:

[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
    
por Jim Cortez 28.01.2016 / 19:52

3 respostas

11

Sugiro remover a opção -d . Você não precisa executar os contêineres em segundo plano nesse caso.

    
por 19.07.2016 / 18:50
6

Descobri que: O autor usa uma abordagem semelhante à sua link . Além disso, ele cria um serviço systemd para cada serviço de composição do docker.

Você pode considerar converter seu arquivo do docker-compose em vários arquivos de serviço do systemd para se livrar da dependência do docker-compose: link Eu usei essa abordagem, ela funciona bem para configurações simples.

    
por 22.02.2016 / 13:08
0

Tente isso, eu encontrei no meu teste, requer mais tempo do que o serviço normal para iniciar ou parar.

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

[Service]
#Restart=always
Type=simple
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
    
por 06.07.2018 / 03:56