Sugiro remover a opção -d
. Você não precisa executar os contêineres em segundo plano nesse caso.
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
Sugiro remover a opção -d
. Você não precisa executar os contêineres em segundo plano nesse caso.
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.
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
Tags systemd docker ubuntu-15.04