Monitorowanie i failover kontenerów Docker za pomocą systemd – jak to zrobić?
W tym poradniku dowiesz się:
✅ jak uruchomić kontenery jako usługi systemd
✅ jak je monitorować i restartować automatycznie
✅ jak dodać prosty failover – np. uruchomić zapasowy kontener po awarii głównego
✅ jak sprawdzać statusy i logi
🔧 Krok 1: Kontener jako usługa systemd (przypomnienie)
Załóżmy, że masz dwa kontenery:
app-main– głównyapp-backup– zapasowy (uruchamiany tylko w razie awarii)
Tworzysz dwa pliki .service.
📁 /etc/systemd/system/app-main.service
[Unit]
Description=Aplikacja główna (Docker)
After=docker.service
Requires=docker.service
[Service]
Restart=on-failure
RestartSec=5
ExecStart=/usr/bin/docker start -a app-main
ExecStop=/usr/bin/docker stop app-main
[Install]
WantedBy=multi-user.target
📁 /etc/systemd/system/app-backup.service
[Unit]
Description=Aplikacja zapasowa (Docker)
After=docker.service
Requires=docker.service
[Service]
Restart=no
ExecStart=/usr/bin/docker start -a app-backup
ExecStop=/usr/bin/docker stop app-backup
[Install]
WantedBy=multi-user.target
🧠 Krok 2: Prosty mechanizm failover – z systemd OnFailure=
W pliku app-main.service dodaj:
[Unit]
OnFailure=app-backup.service
✅ Jeśli app-main się nie uruchomi lub się zawiesi, systemd automatycznie wywoła app-backup.service.

🛠️ Krok 3: Załaduj nowe usługi
sudo systemctl daemon-reload
sudo systemctl enable app-main.service
sudo systemctl enable app-backup.service
Możesz teraz uruchomić:
sudo systemctl start app-main
A w razie błędu app-main, backup uruchomi się automatycznie.
🧪 Krok 4: Symulacja awarii
Wymuś awarię kontenera głównego:
docker stop app-main
docker rm app-main
Potem:
sudo systemctl restart app-main
🔍 Sprawdź:
systemctl status app-backup
🧰 Krok 5: Monitorowanie statusów i logów
📋 Statusy:
systemctl status app-main
systemctl status app-backup
📜 Logi:
journalctl -u app-main
journalctl -u app-backup
🚨 Zaawansowana opcja: monitorowanie zdrowia kontenera (docker inspect)
Możesz stworzyć usługę, która:
- co X minut sprawdza status kontenera
app-main - jeśli kontener jest nieaktywny, uruchamia
app-backup
Przykład skryptu /usr/local/bin/docker-failover.sh:
#!/bin/bash
if ! docker inspect -f '{{.State.Running}}' app-main | grep true; then
echo "app-main down, starting backup..."
docker start app-backup
fi
Zrób usługę i timer systemd, który uruchamia ten skrypt co 5 minut. (Możesz poprosić o osobny poradnik – opiszę to krok po kroku).
✅ Podsumowanie
Dzięki integracji Docker + systemd + failover:
| Co zyskujesz? | Dzięki czemu? |
|---|---|
| Automatyczny restart | Restart=on-failure |
| Reakcja na awarię | OnFailure= |
| Pełna kontrola | systemctl, journalctl, logi |
| Możliwość rozszerzenia | Skrypty monitorujące i timery |
To idealne rozwiązanie dla:
- VPS-ów i serwerów bare-metal
- środowisk bez orkiestratora
- prostych wdrożeń produkcyjnych i dev/test






