Docker Container automatisch aktualisieren mit Watchtower

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/Berlin

Anschließend startest du Watchtower:

docker compose up -d

Wichtig 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:

VariableBedeutung
WATCHTOWER_SCHEDULEZeitplan im 6-Feld-Cron-Format (inkl. Sekunden). Beispiel 0 0 4 * * * = täglich um 4 Uhr
WATCHTOWER_CLEANUPEntfernt alte Images nach dem Update (true/false)
WATCHTOWER_ROLLING_RESTARTAktualisiert Container nacheinander statt alle gleichzeitig
WATCHTOWER_MONITOR_ONLYNur prüfen und benachrichtigen, nicht automatisch aktualisieren
WATCHTOWER_LABEL_ENABLENur Container mit passendem Label überwachen (Opt-in statt alle)
TZZeitzone, 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_ID

Ersetze 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_ID

Watchtower 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) statt latest. 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.

Siehe auch  Proxmox Firewall über Command Line deaktivieren: So geht's
Nach oben scrollen