Mam projekt skomponowania dokera, który chciałbym kontrolować przez systemd. Na początku użyłbym skryptu, który wygląda następująco:
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
(powyżej dostosowane stąd )
Jednak teraz pracuję na hoście dokującym, na którym działa Ubuntu 15.04, który przeszedł na systemd. Jak mogę to zrobić jako skrypt usługi systemowej? Po prostu uruchomienie demona tworzenia dokerów nie pozwoli systemowi na śledzenie i restartowanie w przypadku awarii.
Oto co mam do tej pory:
[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
źródło
Spróbuj tego, znalazłem w moim teście, uruchomienie lub zatrzymanie wymaga więcej czasu niż normalna usługa.
źródło