Eine systemd-Service-Vorlage für docker-compose
English
Deutsch
Hier ist meine Vorlage für die Ausführung eines docker-compose-Services als systemd-Service:
my-service.service
; Speichere als z.B. /etc/systemd/system/my-service.service
[Unit]
Description=MyService
Requires=docker.service
After=docker.service
[Service]
Restart=always
User=uli
Group=docker
; Container herunterfahren (falls laufend) wenn Unit gestoppt wird
ExecStartPre=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml down -v
; Container starten wenn Unit gestartet wird
ExecStart=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml up
; Container stoppen wenn Unit gestoppt wird
ExecStop=/usr/local/bin/docker-compose -f /home/uli/mydockerservice/docker-compose.yml down -v
[Install]
WantedBy=multi-user.targetUm dies für deine Anwendung zum Laufen zu bringen, musst du einige Dinge anpassen:
- Prüfe, ob du docker-compose in
/usr/local/bin/docker-composehast (wie ich, weil ich diedocker-ce-Installation aus den offiziellen Docker-Repositories für Ubuntu 18.04 verwende) oder in/usr/bin/docker-compose(in diesem Fall musst du den korrektendocker-compose-Pfad an allen 3 Stellen in der Service-Datei setzen) - Stelle sicher, dass der Benutzer, als den du docker-compose ausführen möchtest (
uliin diesem Beispiel), Mitglied der docker-Gruppe ist (sudo usermod -a -G docker <user>), und setze den korrekten Benutzer in derUser=...-Zeile - Definiere einen Namen für deinen Service, der sich sowohl im Dateinamen des Services als auch in der
Description=...-Zeile widerspiegeln sollte - Setze den korrekten Pfad für deine
docker-compose-YML-Konfigurationsdatei in allen Exec…=…-Zeilen (d.h. ersetze/home/uli/mydockerservice/docker-compose.ymldurch deinen YML-Pfad).
Danach kannst du deinen Service starten mit
start_my_service.sh
sudo systemctl start my-service # --> my-service.service, verwende den Namen, den du deiner Datei gegeben hastund optional beim Booten aktivieren:
enable_services.sh
systemctl enable docker # Docker wird für deinen Service benötigt, also musst du es auch aktivieren!
systemctl enable my-service # --> my-service.service, verwende den Namen, den du deiner Datei gegeben hastIf this post helped you, please consider buying me a coffee or donating via PayPal to support research & publishing of new posts on TechOverflow