Jak utworzyć usługę systemd dla kontenera Docker – krok po kroku
Dzięki tej metodzie:
✅ Kontener może być automatycznie uruchamiany po restarcie
✅ Będzie nadzorowany przez systemd (restart, logowanie, status)
✅ Możesz ustawić zależności (np. czekać na sieć)
🧱 Założenia
Masz działający kontener, np. myapp, który chcesz uruchamiać jako usługę.
Kontener może być już utworzony albo chcesz, by systemd go tworzył – obie opcje poniżej.
🛠️ Krok 1: Utwórz plik .service
sudo nano /etc/systemd/system/myapp.service
📄 Przykład: uruchamianie kontenera z systemd
[Unit]
Description=Usługa Docker: MyApp
Requires=docker.service
After=docker.service
[Service]
Restart=always
ExecStart=/usr/bin/docker start -a myapp
ExecStop=/usr/bin/docker stop myapp
[Install]
WantedBy=multi-user.target
🧠 Co to oznacza?
| Dyrektywa | Opis |
|---|---|
Requires |
Usługa zależy od Dockera |
After |
Uruchom po Dockerze |
ExecStart |
Uruchom kontener (w trybie dołączonym: -a) |
ExecStop |
Zatrzymaj kontener |
Restart=always |
Automatyczny restart po awarii |
🐳 Krok 2: Utwórz kontener (jeśli jeszcze nie istnieje)
docker run -d --name myapp -p 8080:80 myimage:latest
📌 Nie używaj --restart=always, bo systemd przejmie restartowanie.
🔄 Krok 3: Załaduj nową usługę
sudo systemctl daemon-reload
🚀 Krok 4: Uruchom i włącz usługę
sudo systemctl start myapp
sudo systemctl enable myapp
✅ Krok 5: Sprawdź status i logi
sudo systemctl status myapp
journalctl -u myapp
🧪 Alternatywa: tworzenie kontenera w ExecStart
Jeśli chcesz, by kontener był tworzony za każdym razem (np. testy/dev):
ExecStart=/usr/bin/docker run --rm --name myapp -p 8080:80 myimage:latest
ExecStop=/usr/bin/docker stop myapp
Ale: ⚠️ Kontener nie może wtedy być już uruchomiony – usługa się nie włączy.

🛡️ Dobre praktyki
- Użyj dedykowanego pliku konfiguracyjnego, np.
/etc/myapp/envzEnvironmentFile= - Stwórz volumeny, by dane kontenera były trwałe
- Dodaj zależności od sieci, jeśli kontener wymaga połączenia:
After=network-online.target
Wants=network-online.target
🧹 Jak usunąć usługę systemd dla kontenera?
sudo systemctl stop myapp
sudo systemctl disable myapp
sudo rm /etc/systemd/system/myapp.service
sudo systemctl daemon-reload
✅ Podsumowanie
Usługi systemd dla kontenerów Docker to idealne rozwiązanie dla produkcyjnych wdrożeń, w których wymagana jest niezawodność i integracja z systemem operacyjnym.
Dzięki temu możesz:
- zarządzać kontenerem jak zwykłą usługą
- uruchamiać go automatycznie
- łatwo monitorować i restartować






