Watchdog ermöglicht es euch die Images eures Docker Containers automatisiert auf dem aktuellen Stand zu halten. In dieser zeige ich euch, wie ihr Watchdog in wenigen Schritten mittels Docker installiert.
1. Voraussetzungen
- Docker installiert (Anleitung)
2. Wichtiger Hinweis vorweg
Watchtower macht automatische Updates! Wenn Watchtower eine Aktualisierung macht und das Latest-Image hat widererwartend einen Fehler könnte es passieren, dass nach der Aktualisierung der Container nicht mehr läuft oder es gar zum Datenverlust kommt!
3. Verzeichnis erstellen
Zu erst erstellen wir das passende Verzeichnis:
mkdir -p /opt/containers/watchtower
4. Docker Compose anlegen
Nun legen wir die eigentliche Docker Datei an. Diese dient dazu unseren späteren Container zu erstellen. In diese Datei kopiere ich mir mal das Beispiel aus der Dokumentation:
nano /opt/containers/watchtower/docker-compose.yml
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock
5. Watchtower starten
Wir starten das angelegte Docker-Compose nun mal mit der beispielhaften Konfiguration:
docker compose -f /opt/containers/watchtower/docker-compose.yml up
docker-compose -f /opt/containers/watchtower/docker-compose.yml up
Ausgabe:
Damit läuft der Container und gibt uns folgende Informationen aus:
- msg=“Watchtower 1.4.0″
–> Version des laufenden Watchtower - msg=“Using no notifications“
–> Das keine Benachrichtigungen konfiguriert sind - msg=“Checking all containers (except explicitly disabled with label)“
–> Es werden alle Container geprüft außer die die eine expliziten Hinweis gesetzt haben - msg=“Scheduling first run: 2022-06-17 18:57:19 +0000 UTC“
–> Geplante erste Durchführung - msg=“Note that the first check will be performed in 23 hours, 59 minutes, 59 seconds“
–> Zeit bis zur ersten Durchführung
Damit würde es grundsätzlich schonmal funktionieren und hat akut auch noch kein Update eingespielt sondern nur geplant. Wie wir den ausgegebenen Informationen entnehmen können gibt es wohl noch eine Vielzahl an möglichen Konfigurationen.
6. Weitere Konfigurationen
Genau mit dieser Vielzahl an möglichen Konfigurationen wollen wir uns in diesem Teil beschäftigen.
6.1 Zeitzone definieren
Es fällt auf, dass die Zeitzone bzw. die Zeit im Container nicht stimmt. Dazu gibt es in den Argumenten auch einen Hinweis es via TZ zu definieren. Wir nutzen in diesem Fall einfach die Zeitzone vom Host:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro
Wenn wir diesen Container nun starten gibt er uns nun die Zeit + 24h aus. Diese Entspricht nun der Host-Zeit.
6.2 Benachrichtigungen
Es gibt einen Hinweis, dass wir Benachrichtigungen konfigurieren können und es erscheint Sinnvoll diese auch zu konfigurieren damit wir einen Bericht bekommnen über getätigte Updates bzw. Durchläufe. Dazu werfen wir einen kurzen Blick in die offizielle Dokumentation. Diese gibt uns folgende Möglichkeiten:
email
-> Benachrichtigung via Emailslack
-> Benachrichtigung via Slackmsteams
-> Benachrichtigung via MSTeamsgotify
-> Benachrichtigung via Gotifyshoutrrr
-> Benachrichtigung via containrrr/shoutrrr
6.2.1 via Slack
Ich persönlich habe mich für die Variante via Slack entschieden. Da ich mehrere Server mit Watchtower betreibe und zugleich nicht unnötig zugespamt werden möchte z.B. via Email.
Für diese Variante benötigen wir innerhalb unseres Slack Workspaces einen vorhanden Channel oder legen einen neuen Channel an. Nun müssen wir diesem Channel die App „Eingehende Webhooks“ hinzufügen. Dies gibt uns eine Webhook-URL aus welche wir in die Konfiguration der docker-compose.yml einarbeiten:
“Ausgabekräftiges Label” und “Name anpassen” kann an dieser Stelle frei gewählt werden. Ich persönlich habe mir auch das Symbol mit dem Watchtower-Symbol angepasst.
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info # Klassifizierung, die für die Benachrichtigungen verwendet wird. Mögliche Werte sind: panic, fatal, error, warn, info, debug oder trace. - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" # Webhook-URL einfügen - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 # Eigenen Identifier eingeben - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower # Vorher angelegten oder zugeordneten Channel eingeben
Wenn wir nun den Container erneut starten gibt er uns aus, dass Slack nun zur Benachrichtigung definiert wurde. Innerhalb von Slack sollten wir in dem gewünschten Channel auch eine Benachrichtigung bekommen haben:
docker compose -f /opt/containers/watchtower/docker-compose.yml up
docker-compose -f /opt/containers/watchtower/docker-compose.yml up
Ausgabe:
6.2.2 via Email
In dieser Variante möchten wir eine Email als Benachrichtigungen einrichten.
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info # Klassifizierung, die für die Benachrichtigungen verwendet wird. Mögliche Werte sind: panic, fatal, error, warn, info, debug oder trace. - WATCHTOWER_NOTIFICATIONS=email - WATCHTOWER_NOTIFICATION_EMAIL_FROM=absender@meine-domain.tld # Angezeigter Absender der Email einfügen - WATCHTOWER_NOTIFICATION_EMAIL_TO=zieladresse@meine-domain.tld # Empfänger-Adresse der Email einfügen - WATCHTOWER_NOTIFICATION_EMAIL_SERVER=meine-domain.tld # SMTP-Server einfügen - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_USER=absender@meine-domain.tld # SMTP Benutzername einfügen - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PASSWORD=MAILPASSWORD # SMTP-Passwort einfügen - WATCHTOWER_NOTIFICATION_EMAIL_SERVER_PORT=587 # SMTP-Port einfügen
Wenn wir nun den Container erneut starten gibt er uns aus, dass SMTP nun zur Benachrichtigung definiert wurde und wir bekommen eine Email an die definierte Adresse:
docker compose -f /opt/containers/watchtower/docker-compose.yml up
docker-compose -f /opt/containers/watchtower/docker-compose.yml up
6.3 Container-Auswahl via Flag
6.3.1 Opt out
Standardisiert werden nun alle Container aktualisiert, die nicht explizit via Label
von der Aktualisierung ausgeschlossen wurden. Dies kann uns zum Beispiel bei Mailcow Probleme bereiten. Mailcow hat ein eigenes Update-Script und sollte deswegen vom automatisierten Aktualisieren ausgeschlossen werden.
Mit diesem Label
können wir einzelne Container von der Aktualisierung ausschließen:
labels: - "com.centurylinklabs.watchtower.enable=false"
Wenn wir nun Container von der Aktualisierung ausschließen möchten müssen wir dieses Label
in jede Container-Definition der jeweiligen Docker-Compose-Datei hinzufügen. Als Beispiel schließen wir mal den Watchtower selbst von den aktualisierungen aus:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower labels: - "com.centurylinklabs.watchtower.enable=false" # Hier wird der Service: Watchtower von den Aktualisierungen ausgeschlossen.
6.3.2 Opt in
Ich persönlich bevorzuge die Variante, dass kein Container aktualisiert wird. Nur die Container welche ich explizit definiere also sozusagen ein Opt-in.
Dazu erweiteren wir unsere docker-compose.yml
um die Option WATCHTOWER_LABEL_ENABLE
:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true # Hiermit aktivieren wir, dass nur explizit definierte Services aktualisiert wird.
Nun können wir jeden Container via docker-compose.yml
mittels Label
mitgeben, dass dieser explizit aktualisiert werden soll:
labels: - "com.centurylinklabs.watchtower.enable=true"
Wenn wir nun Container automatisiert aktualisieren lassen möchten, müssen wir dieses Label
in jede Container-Definition der jeweiligen Docker-Compose-Datei hinzufügen. Als Beispiel möchten wir das Watchtower sich automatisiert auf dem neusten Stand hält:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true labels: - "com.centurylinklabs.watchtower.enable=true" # Hiermit wird dieser Service explizit automatisiert aktualisiert.
6.4 Zeitplan
Nun gilt es einen Zeitplan zu erstellen. Beim Zeitplan können wir mit der bekannten Cron expression in 6 Feldern eine Regelmäßigkeit in der docker-compose.yml
Konfigurieren:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * # Hier anpassen. Im Beispiel: Jede Nacht um 04:00 Uhr labels: - "com.centurylinklabs.watchtower.enable=true"
In diesem Beispiel würden jede Nacht um 04:00 Uhr die Aktualisierungen durchgeführt.
6.5 Images säubern
Mit der Zeit wird das Docker-System ganz schön zuwuchern, weil mit jedem durchgeführten Aktualisierung wird ein neues Image geladen. Nun ist es sinnvoll, wenn wir die alten Images auch automatisiert löschen.
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true # Mit dieser Option werden nach dem Start des neuen Images die alten entfernt labels: - "com.centurylinklabs.watchtower.enable=true"
6.6 Timeout
Jetzt definieren wir noch ein größeres Timeout. Das Timeout ist standardgemäß auf 10s gesetzt – 10 Sekunden bevor der Container zwangsweise gestoppt wird. Wir setzten die Zeit auf 30 Sekunden:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s # Hier passen wir die Timeoutzeit an. labels: - "com.centurylinklabs.watchtower.enable=true"
6.7 Neustarten
Definieren wir nun noch, dass der Container nach der aktualisierung neu gestartet wird:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true # Hiermit wird der Neustart konfiguriert. labels: - "com.centurylinklabs.watchtower.enable=true"
6.8 Images nacheinander starten
Wenn wir die Images nicht gleichzeitig sonder nacheinander starten lassen wird unserer potenzielle Down-Time verlängert. Also lassen wir doch die Container nacheinander neustarten.
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true - WATCHTOWER_ROLLING_RESTART=true # Restart nacheinander durchführen labels: - "com.centurylinklabs.watchtower.enable=true"
6.9 Gestopte Container
Auch erstellte und verlassene Container können wir berücksichtigen.
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true - WATCHTOWER_ROLLING_RESTART=true labels: - "com.centurylinklabs.watchtower.enable=true"
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 4 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true - WATCHTOWER_ROLLING_RESTART=true - WATCHTOWER_INCLUDE_STOPPED=true # Erstellte und verlassene Container mit einbeziehen labels: - "com.centurylinklabs.watchtower.enable=true"
6.10 weiter Möglichkeiten
Es gibt noch viele Möglichkeiten, die wie hier konfigurieren könnten. Ich kann euch an dieser Stelle nur nochmals die Dokumentation ans Herz legen.
7. Komplette Docker-Compose
Long Story Short:
version: "3" services: watchtower: image: containrrr/watchtower volumes: - /var/run/docker.sock:/var/run/docker.sock - /etc/localtime:/etc/localtime:ro environment: - WATCHTOWER_NOTIFICATIONS_LEVEL=info - WATCHTOWER_NOTIFICATIONS=slack - WATCHTOWER_NOTIFICATION_SLACK_HOOK_URL="https://hooks.slack.com/services/TXXXXX/BXXXXX/XXXXXXXX" - WATCHTOWER_NOTIFICATION_SLACK_IDENTIFIER=watchtower-server-01 - WATCHTOWER_NOTIFICATION_SLACK_CHANNEL=#watchtower - WATCHTOWER_NO_STARTUP_MESSAGE=true - WATCHTOWER_LABEL_ENABLE=true - WATCHTOWER_SCHEDULE=0 0 9 * * * - WATCHTOWER_CLEANUP=true - WATCHTOWER_TIMEOUT=30s - WATCHTOWER_INCLUDE_RESTARTING=true - WATCHTOWER_ROLLING_RESTART=true - WATCHTOWER_INCLUDE_STOPPED=true labels: - "com.centurylinklabs.watchtower.enable=true"
docker compose -f /opt/containers/watchtower/docker-compose.yml up
docker-compose -f /opt/containers/watchtower/docker-compose.yml up
8. Quellen:
- https://psycho0verload.it/docker-images-automatisiert-aktualisieren-mit-watchtower/
- https://containrrr.dev/watchtower/
Mittlerweile ist shoutrrr das empfohlene Benachrichtigungsformat, alle anderen gelten als Legacy. Vllt. geht man in der Anleitung nochmal mehr auf Shoutrrr ein (Kann ja auch slack, email, etc). Siehe https://containrrr.dev/shoutrrr/v0.8/services/overview/
Ihr habt eine super Anleitung zu Grafana und Prometheus, und wie die Daten aus Crowdsec z.B. dahin kommen, super wäre es, andere Container wie diesen, die Daten an Prometheus liefern können, auch mit einem kleinem Kapitel zu versehen.
Als Alternative zu selektiv per label updaten, fände ich den Hinweis auch noch gut, dass man auch via Label nur monitoring sagen kann:
com.centurylinklabs.watchtower.monitor-only
Hallo allerseits,
sicher eine doofe Frage, aber gibt es Empfehlungen, welche Container nicht automatisch aktualisiert werden sollten? Mailcow wurde genannt, was wäre noch wichtig?
Vielen Dank und liebe Grüße
Frank