Container-Images bekommen ständig Updates – für neue Funktionen und vor allem für Sicherheitslücken. Sie manuell einzuspielen kostet Zeit und wird schnell vergessen. Die Lösung: Mit Watchtower aktualisierst du deine Docker-Container automatisch. In dieser Anleitung installierst du Watchtower per Docker Compose, legst einen Zeitplan fest, richtest Benachrichtigungen ein und lernst, wie du einzelne Container gezielt ausschließt.
Automatische Updates: sinnvoll oder riskant?
Automatische Updates halten deine Dienste sicher und aktuell, ohne dass du dich kümmern musst. Sie haben aber auch eine Kehrseite, die du kennen solltest:
- Vorteil: Sicherheitsupdates landen zeitnah auf dem System, ganz ohne manuelles Eingreifen.
- Vorteil: Weniger Wartungsaufwand – gerade bei vielen Containern im Homelab.
- Nachteil: Ein fehlerhaftes Update kann einen Dienst lahmlegen. Bei kritischen Anwendungen ist ein Backup und ein fester Image-Tag Pflicht.
Praktischer Kompromiss: unkritische Dienste automatisch aktualisieren, kritische nur überwachen und selbst updaten. Wie das geht, zeigen wir weiter unten.
Wie funktioniert Watchtower?
Watchtower läuft selbst als Container. In einem festgelegten Intervall prüft es für jeden überwachten Container, ob im Registry (z. B. Docker Hub) ein neueres Image mit demselben Tag vorliegt. Ist das der Fall, lädt Watchtower das neue Image, stoppt den alten Container und startet ihn mit exakt denselben Optionen neu – gleiche Ports, Volumes und Umgebungsvariablen. Optional räumt es das alte Image anschließend auf.
Voraussetzung ist eine lauffähige Docker-Umgebung. Falls du Compose noch nicht eingerichtet hast, hilft dir unsere Anleitung Docker Compose installieren.
Watchtower per Docker Compose installieren
Lege eine docker-compose.yml mit folgendem Inhalt an. Das Image containrrr/watchtower ist die verbreitete Standard-Variante:
services:
watchtower:
image: containrrr/watchtower
container_name: watchtower
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock
environment:
- WATCHTOWER_CLEANUP=true
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- TZ=Europe/BerlinAnschließend startest du Watchtower:
docker compose up -dWichtig ist der Mount von /var/run/docker.sock: Nur so kann Watchtower mit der Docker Engine kommunizieren und Container verwalten. Standardmäßig überwacht Watchtower alle laufenden Container auf dem Host.
Zeitplan und wichtige Optionen
Über Umgebungsvariablen steuerst du das Verhalten. Diese sind besonders nützlich:
| Variable | Bedeutung |
|---|---|
WATCHTOWER_SCHEDULE | Zeitplan im 6-Feld-Cron-Format (inkl. Sekunden). Beispiel 0 0 4 * * * = täglich um 4 Uhr |
WATCHTOWER_CLEANUP | Entfernt alte Images nach dem Update (true/false) |
WATCHTOWER_ROLLING_RESTART | Aktualisiert Container nacheinander statt alle gleichzeitig |
WATCHTOWER_MONITOR_ONLY | Nur prüfen und benachrichtigen, nicht automatisch aktualisieren |
WATCHTOWER_LABEL_ENABLE | Nur Container mit passendem Label überwachen (Opt-in statt alle) |
TZ | Zeitzone, damit der Zeitplan korrekt greift |
Alternativ zum festen Zeitplan kannst du über WATCHTOWER_POLL_INTERVAL ein Intervall in Sekunden angeben (Standard: alle 24 Stunden). Nutze entweder das eine oder das andere.
Einzelne Container von Updates ausschließen
Nicht jeder Container soll automatisch aktualisiert werden. Über ein Label am jeweiligen Container schließt du ihn aus. Ergänze dazu in dessen Compose-Definition:
services:
meine-datenbank:
image: postgres:16
labels:
- "com.centurylinklabs.watchtower.enable=false"Umgekehrt kannst du mit WATCHTOWER_LABEL_ENABLE=true das Prinzip umdrehen: Dann überwacht Watchtower nur noch Container, die ausdrücklich das Label ...watchtower.enable=true tragen. Das ist die sicherere Variante, wenn du volle Kontrolle behalten willst.
Benachrichtigungen einrichten
Watchtower kann dich nach jedem Durchlauf informieren – etwa per Telegram, Discord, Slack oder E-Mail. Die Konfiguration erfolgt über einen sogenannten Shoutrrr-URL. Beispiel für Telegram:
environment:
- WATCHTOWER_SCHEDULE=0 0 4 * * *
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_URL=telegram://BOT_TOKEN@telegram/?chats=CHAT_IDErsetze BOT_TOKEN und CHAT_ID durch deine Werte. Für andere Dienste ändert sich lediglich das URL-Schema (z. B. discord:// oder smtp:// für E-Mail).
Nur benachrichtigen statt automatisch updaten
Möchtest du die Kontrolle behalten und nur erfahren, wann ein Update verfügbar ist, kombinierst du den Monitor-Modus mit Benachrichtigungen:
environment:
- WATCHTOWER_MONITOR_ONLY=true
- WATCHTOWER_NOTIFICATIONS=shoutrrr
- WATCHTOWER_NOTIFICATION_URL=telegram://BOT_TOKEN@telegram/?chats=CHAT_IDWatchtower spielt dann keine Updates ein, sondern meldet nur, für welche Container ein neues Image bereitliegt. Das Aktualisieren übernimmst du selbst.
Sicherheitshinweise
- Feste Tags nutzen: Verwende nach Möglichkeit konkrete Versions-Tags (z. B.
postgres:16) stattlatest. So verhinderst du unerwartete Major-Updates. - Backups einplanen: Sichere Daten-Volumes regelmäßig, damit du nach einem misslungenen Update zurück kannst.
- Docker-Socket schützen: Watchtower hat über den Socket vollen Zugriff auf Docker. Betreibe den Container nur auf Systemen, denen du vertraust.
Fazit
Watchtower nimmt dir das lästige manuelle Aktualisieren ab und hält deine Docker-Container automatisch aktuell. Über Zeitplan, Labels und den Monitor-Modus behältst du dabei die volle Kontrolle darüber, was wann passiert. Für produktive Dienste empfehlen wir feste Image-Tags, regelmäßige Backups deiner Docker Volumes und – bei kritischen Containern – den reinen Benachrichtigungsmodus. Damit dein Host schlank bleibt, kombinierst du Watchtower mit dem regelmäßigen Aufräumen ungenutzter Images. Passend dazu: unsere Gründe fürs Selfhosting.

