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.target

Um dies für deine Anwendung zum Laufen zu bringen, musst du einige Dinge anpassen:

  1. Prüfe, ob du docker-compose in /usr/local/bin/docker-compose hast (wie ich, weil ich die docker-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 korrekten docker-compose-Pfad an allen 3 Stellen in der Service-Datei setzen)
  2. Stelle sicher, dass der Benutzer, als den du docker-compose ausführen möchtest (uli in diesem Beispiel), Mitglied der docker-Gruppe ist (sudo usermod -a -G docker <user>), und setze den korrekten Benutzer in der User=...-Zeile
  3. Definiere einen Namen für deinen Service, der sich sowohl im Dateinamen des Services als auch in der Description=...-Zeile widerspiegeln sollte
  4. Setze den korrekten Pfad für deine docker-compose-YML-Konfigurationsdatei in allen Exec…=…-Zeilen (d.h. ersetze /home/uli/mydockerservice/docker-compose.yml durch 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 hast

und 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 hast

Check out similar posts by category: Container, Docker, Linux