kb

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
Nächste Überarbeitung Beide Seiten der Revision
kb [2016/04/23 09:13]
flacco
kb [2016/08/13 11:09]
flacco [Autostart von Docker Containern mittels Systemd]
Zeile 786: Zeile 786:
 ...to be continued. ...to be continued.
  
 +===== Autostart von Docker Containern mittels Systemd =====
 +
 +Docker Container, die einen Dienst anbieten sollen natürlich beim Start eines Systems möglichst automatisch starten. Außer der Docker-eigenen "​Restart=always"​ Möglichkeit,​ die bisweilen ein wenig nervig sein kann, bietet sich die Verwendung von **//​systemd//​** an.
 +
 +Leider ist die in der Docker-Dokumentation beschriebene Service-Unit Vorlage ein wenig zu simpel gestrickt. Sie funktioniert nicht immer. Es kommt vor, dass es mit dieser Vorlage während des Systemstarts unzählige scheiternde Versuche gibt einen Container zu starten und **//​systemd//​** dann irgendwann aufgibt.
 +
 +Daher hier eine Vorlage, die auch mit störrischen Containern funktioniert:​
 +
 +<​code>​
 +[Unit]
 +Description=BlaBlaBla Firebird-Server Container
 +Requires=docker.service
 +After=docker.service network.service
 +
 +[Service]
 +Restart=on-failure
 +RestartSec=10
 +ExecStart=/​usr/​bin/​docker run --volume=/​srv/​docker/​blablafb/​data:/​data --publish=3050:​3050 --name=leberwurst blablablasoftware/​db_server
 +ExecStop=/​usr/​bin/​docker stop -t 2 leberwurst
 +ExecStopPost=/​usr/​bin/​docker rm -f leberwurst
 +
 +[Install]
 +WantedBy=multi-user.target
 +</​code>​
 +
 +Dieser Vorlage unterscheidet sich an mehreren Punkten von der in der Docker-Doku gezeigten.
 +
 +Zunächst wird für die Restart-Option der Parameter "​on-failure"​ statt "​always"​ genutzt. Dies verhindert unnötige Neustarts. Ich vermute, dass die Rückmeldungen von Docker nicht dem entsprechen,​ was //​**systemd**//​ erwartet und daher mit "​always"​ Neustarts ausgelöst werden, die nicht notwendig sind.
 +
 +Auch im Fehlerfall sollte zwischen den Neustarts eine Pause liegen, da der Docker-Container ggf. nicht so schnell agiert, wie //​**systemd**//​ das erwartet. "​RestartSec=10"​ setzt diese Pause auf 10 Sekunden.
 +
 +Da ich im Beispiel dem Container mit "​--name="​ einen reproduzierbaren Namen gebe, scheitern zu schnelle Neustarts oft daran, dass bereits ein Container mit diesem Namen existiert (...auch wenn dieser nicht funktioniert). Mit "​ExecStopPost="​ wird nach einem Stoppen des Containers dieser auch entfernt. Damit steht er einem Neustart unter gleichem Namen nicht im Weg.
 +
 +Gespeichert werden die Container-Service-Unit Dateien unter: <​file>/​etc/​systemd/​system</​file>​
 +
 +Eine Veränderung dieser Dateien muss mit
 +
 +<​code>​
 +linux:~ # systemctl daemon-reload
 +</​code>​
 +
 +übernommen werden.
  • kb.txt
  • Zuletzt geändert: 2020/10/20 10:47
  • von flacco