Ich habe eine Servicedatei, die ein Shell-Skript ausführt, und das Skript muss ausgeführt werden, nachdem Docker gestartet wurde. Folgendes habe ich versucht, aber das Skript wird gestartet, ohne auf docker.service zu warten:
[Unit]
Description=network configuration service
Requires=docker.service
After=docker.service
[Service]
WorkingDirectory=/etc/systemd/system/
Type=oneshot
ExecStart=/bin/bash netset.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Antwort1
Dies ist die Konfigurationsdatei der Service-Unit, die ich habe und die ausgeführt wird, nachdem docker.service aktiv ist, und die auch jedes Mal erneut ausgeführt wird, wenn docker.service neu gestartet wird:
[Unit]
Description=Floating IP
After=docker.service
BindsTo=docker.service
ReloadPropagatedFrom=docker.service
[Service]
Type=oneshot
ExecStart=/usr/local/bin/floating-ip.sh
ExecReload=/usr/local/bin/floating-ip.sh
RemainAfterExit=yes
[Install]
WantedBy=multi-user.target
Dokumentation der genutzten Optionen:
Das von diesem Dienst ausgeführte Skript fügt eine iptables SNAT-Regel hinzu, damit Docker-Container die IP-Adresse auf eth0:1 anstelle der Standardadresse auf eth0 verwenden, d. h. den Ansatz beibehalten beihttps://serverfault.com/a/686107.