Docker-Container mit Watchtower automatisch aktuell halten¶
Veröffentlicht am 26. September 2026 · Geschätzte Lesezeit: 6 Minuten
Watchtower ist ein schlanker Docker-Container, der deine laufenden Container auf neue Image-Versionen prüft und automatisch aktualisiert. Statt für jeden Stack manuell docker compose pull und docker compose up -d auszuführen, erledigt Watchtower das nach einem festgelegten Zeitplan selbstständig – mit denselben Einstellungen, Volumes und Netzwerken wie beim ursprünglichen Start.[1] Die Einrichtung dauert etwa 15 Minuten.
Voraussetzungen
- Ein Linux-Server mit Docker und Docker Compose
- Terminalzugriff und ein Benutzer mit
sudo-Rechten - Ausgehender Internetzugriff zu den verwendeten Image-Registries (Docker Hub, GitHub Container Registry, …)
- Ein aktuelles Backup aller wichtigen Anwendungsdaten und Compose-Dateien
1. Projektordner anlegen¶
Lege einen eigenen Ordner für Watchtower an:
2. Compose-Datei erstellen¶
Erstelle /opt/watchtower/compose.yaml. Das Basis-Setup startet Watchtower mit einem täglichen Prüflauf um 04:00 Uhr und räumt alte Images automatisch auf:
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Berlin
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_INCLUDE_STOPPED=false
Ersetze Europe/Berlin durch deine Zeitzone (Liste mit timedatectl list-timezones).
Fork statt archiviertem Original
Das ursprüngliche Image containrrr/watchtower wurde im Dezember 2025 archiviert und ist für neue Installationen nicht mehr geeignet. Der Fork nickfedor/watchtower (v1.19.0, Stand Juni 2026) ist ein voll kompatibler Drop-in-Ersatz mit denselben Konfigurationsmöglichkeiten.[2]
3. Watchtower starten¶
Prüfe die Konfiguration und starte den Container:
Kontrolliere anschließend, ob der Container läuft:
4. Nächsten Lauf im Log prüfen¶
Watchtower zeigt beim Start an, wann der erste Prüflauf geplant ist:
Suche nach einer Zeile wie Scheduling first run: 2026-09-27 04:00:00. Ist stattdessen ein Poll-Intervall gesetzt, erscheint eine Meldung wie Scheduling first run: 2026-09-27 09:01:00 +0000 UTC – das ist der Zeitpunkt des nächsten standardmäßigen 24-Stunden-Prüflaufs.
5. Einmaligen Testlauf durchführen¶
Starte Watchtower einmalig im Vordergrund, um sofort zu sehen, ob aktualisierbare Images vorhanden sind. Der Container führt die Prüfung aus und beendet sich selbst:
docker run --rm \
-v /var/run/docker.sock:/var/run/docker.sock \
nickfedor/watchtower:latest \
--run-once --cleanup
Pro Container zeigt Watchtower an, ob ein neues Image gefunden wurde (Found new ...), kein Update nötig ist (No new images found for ...) oder der Container übersprungen wird (Skipping ...). Nach dem Testlauf kannst du die nicht mehr benötigten ausgeschiedenen Images mit docker image prune -f manuell entfernen oder Watchtower dauerhaft mit der Umgebungsvariable WATCHTOWER_CLEANUP=true betreiben, die alte Images automatisch nach jedem erfolgreichen Update löscht.[1]
6. Container gezielt auswählen oder ausschließen¶
Standardmäßig aktualisiert Watchtower alle laufenden Container. Das ist nicht immer gewünscht – Datenbanken wie PostgreSQL oder MariaDB sollten keine automatischen Major-Upgrades erhalten.
Ausschluss per Label (Opt-out): Füge an dem Dienst, den Watchtower nicht aktualisieren soll, dieses Label ein:
Opt-in-Modus (Empfehlung): Aktiviere den Label-Modus, sodass Watchtower nur Container mit dem enable-Label aktualisiert:[3]
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Berlin
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_LABEL_ENABLE=true
Ergänze anschließend bei jedem Dienst, der automatisch aktualisiert werden soll:
Container ohne dieses Label ignoriert Watchtower dann vollständig.
7. Benachrichtigungen einrichten¶
Watchtower kann über Shoutrrr Benachrichtigungen versenden, sobald ein Container aktualisiert wurde. Das ist besonders im Opt-in-Modus wichtig, damit du siehst, was automatisch passiert ist.[1]
Telegram (Beispiel):
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- TZ=Europe/Berlin
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_NOTIFICATION_URL=telegram://<bot-token>@telegram?channels=<chat-id>
Ersetze <bot-token> durch den Token deines Telegram-Bots und <chat-id> durch die numerische ID des Empfängerchats. Das Shoutrrr-Format der Fork-Dokumentation ist mit dem Original kompatibel.[4]
Weitere Dienste wie Discord, Gotify oder E-Mail sind nach demselben Muster möglich. Eine vollständige Liste aller unterstützten Dienste und ihrer URL-Formate findest du in der Shoutrrr-Dokumentation.[4]
8. Poll-Intervall oder Cron-Planung¶
Du hast zwei sich ausschließende Optionen für den Zeitplan:
| Option | Variable/Flag | Beschreibung |
|---|---|---|
| Cron | WATCHTOWER_SCHEDULE |
Sechsfelder-Cron (Sekunden Minuten Stunden Tag-Monat Monat Wochentag). Beispiel: 0 0 4 * * * = täglich um 04:00 Uhr |
| Intervall | WATCHTOWER_POLL_INTERVAL |
Sekunden zwischen Prüfläufen. 86400 = 24 Stunden, 3600 = stündlich |
Setze nie beide Varianten gleichzeitig – sonst ist das Verhalten undefiniert.
9. Watchtower selbst von Updates ausnehmen¶
Damit Watchtower nicht versucht, sich selbst zu aktualisieren, füge ihm das disable-Label hinzu:
services:
watchtower:
image: nickfedor/watchtower:latest
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
labels:
- "com.centurylinklabs.watchtower.enable=false"
environment:
- TZ=Europe/Berlin
- WATCHTOWER_LABEL_ENABLE=true
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- WATCHTOWER_CLEANUP=true
10. Backup und Rückweg¶
Watchtower selbst ist zustandslos – die Konfiguration steckt komplett in der Compose-Datei. Ein Backup ist daher schnell erstellt:
Zum vollständigen Entfernen stoppst du Watchtower und löscht den Ordner:
Die von Watchtower aktualisierten Container laufen unverändert weiter.
Sollte ein automatisches Update einen Container beschädigen:
- Stoppe Watchtower:
docker compose -f /opt/watchtower/compose.yaml down - Setze das Image des betroffenen Containers auf eine bekannte funktionierende Version zurück (z. B. von
:latestauf:16bei PostgreSQL) - Starte den Container manuell neu:
docker compose up -d - Prüfe Logs und Funktionsfähigkeit
Typische Fehler¶
- Archiviertes Image verwendet:
containrrr/watchtowerstattnickfedor/watchtower. Der Fork ist der einzige aktuell gepflegte Zweig. Prüfe mitdocker pull nickfedor/watchtower:latest, ob du die richtige Image-Quelle verwendest. - Schedule und Poll-Intervall gleichzeitig gesetzt: Nur eine der beiden Varianten nutzen, sonst unklares Verhalten.
- Label-Modus aktiv, aber keine Labels gesetzt:
WATCHTOWER_LABEL_ENABLE=trueohnecom.centurylinklabs.watchtower.enable=truean einem Container führt dazu, dass Watchtower gar nichts aktualisiert. Das Log zeigt dann nurSkipping. - Permission denied auf dem Docker-Socket: Bei Rootless Docker liegt der Socket nicht unter
/var/run/docker.sock. Prüfe mitdocker context inspectden tatsächlichen Socket-Pfad und passe das Volume an. - Private Registry ohne Login: Images aus privaten Registries erfordern, dass die Anmeldedaten im Watchtower-Container verfügbar sind. Entweder
~/.docker/config.jsonmounten oder die Registry-Umgebungsvariablen setzen.
Sources¶
[1] https://watchtower.nickfedor.com/dev/quickstart/ – Watchtower Fork: Quickstart, Container-Selection und Benachrichtigungen [2] https://github.com/nicholas-fedor/watchtower/releases – Fork GitHub Releases: v1.19.0 (Juni 2026) und aktuellere Versionen [3] https://watchtower.nickfedor.com/v1.20.0/getting-started/container-selection/ – Container Selection: Opt-in per Label [4] https://containrrr.dev/shoutrrr/v0.8/services/telegram/ – Shoutrrr: Telegram-URL-Format für Benachrichtigungen [5] https://s-edv.com/anleitungen/watchtower-docker-automatische-updates – Ausführliche deutschsprachige Praxis-Anleitung (Juni 2026) [6] https://youtube.com/watch?v=GHeZaoUpVcQ – Better Stack: "Watchtower – The PERFECT Docker Automation Tool?" (04:22 Min.)
Fertig¶
Watchtower aktualisiert deine ausgewählten Docker-Container nun automatisch nach dem eingestellten Zeitplan. Die Funktionsprüfung ist bestanden, wenn der Container läuft, das Log den nächsten geplanten Lauf anzeigt und ein manueller Testlauf (--run-once) die erwarteten Container prüft, ohne unerwartet welche zu überspringen oder zu aktualisieren. Du erhältst bei erfolgreicher Benachrichtigungskonfiguration eine Meldung über durchgeführte Updates.