IT Projekte / Home Lab / Smart Home / Games

Allgemein, Docker, Raspberry Pi

Watchtower für Docker Container und Gotify einrichten

Ich möchte Dir mit diesem Beitrag dabei helfen, Watchtower als Beobachter Deiner Container einzurichten. Jeder möchte wissen, ob nicht ein Update in Form eines neuen Images für seinen Container vorliegt. Manchmal ist es besser nur eine Benachrichtigung darüber zu erhalten, dass ein neues Image verfügbar ist. Um dies umzusetzen, wird ein Gotify Server benötigt.

Du benötigst Folgendes:

  • Docker

Docker mittels Repository unter Debian installieren
Docker auf dem Raspberry Pi 4 installieren

1. Gotify einrichten

Gotify ist ein Server, welcher Events von unterschiedlichen Stellen empfangen und diese dann an einen Client (zum Beispiel Browser oder App) weiter leitet. Unter anderem kannst Du Watchtower mit Deinem Gotify Server verbinden.

Lege zunächst einen Ordner für die Daten von Gotify an:

mkdir gotify
Gotify – Ordner anlegen

Im Anschluss daran kannst Du auch schon Deinen Gotify Server installieren.

docker run -d --name gotify -p 80:80 -e TZ="Europe/Berlin" -v /home/pi/gotify:/app/data gotify/server

# Raspberry Pi 4
docker run -d --name gotify -p 80:80 -e TZ="Europe/Berlin" -v /home/pi/gotify:/app/data gotify/server-arm7

Führen den docker run Befehl aus, mit einem -d für detached, damit keine Ausgabe aller Informationen stattfindet.
Der Tag --name dient dazu, dem Container einen eindeutigen Namen zu geben.
Unter dem -p legst Du den Port fest. Falls Du bereits einen Container unter dem Port 80 hast, solltest Du die Zahl vor dem Doppelpunkt beliebig auf einen andere Port ändern, der noch frei ist.

Der Parameter -e für Enviroment steht für beliebig viele Argumente, die Du dem Server mitgeben möchtest. Ich gebe dem Server hier die Timezone (TZ) mit.
Damit Du die Daten persistent speichern kannst, lege hier unter dem Parameter -v für Volumen einen festen Pfad zu einem freien Ordner auf Deinem System an. In diesem wird Gotify nun seine Daten ablegen.

Über Deinen Browser kannst Du jetzt auf Deinen Gotify Server zugreifen. Dieser trägt im Anschluss Deinen Browser als Client unter Clients bei sich ein.

Der Login erfolgt mit admin für Nutzername und Passwort.

Gotify – Login

Wie Du siehst, wurde Dein Browser als Client automatisch hinzugefügt

Gotify – Client hinzugefügt

1.2 Watchtower Applikation anlegen

Um von Watchtower später Informationen erhalten zu können, musst Du eine Applikation in Gotify hinzufügen. Dies kannst Du ganz einfach unter Appications machen und auf Create Application klicken.

Gotify – Applikation hinzufügen

Gebe einen beliebigen Namen an, um Deine Applikation identifizieren zu können. Wenn Du magst, auch eine Beschreibung.

Gotify – Applikation erstellen

Jetzt hast Du eine Applikation, welche über einen Token verfügt. Diesen Token benötigst Du gleich beim erstellen Deines Watchtower Containers, damit dieser auch weiß, wo hin er die Informationen senden soll.

Gotify – Applikation Token anzeigen

1. Watchtower einrichten

Watchtower verfügt über viele Argumente, die dem docker run-Befehl mitgegeben werden können. Unter anderem kann zwischen Docker Container direkt updaten und schaue, ob es ein neues Update gibt unterschieden werden.

#Laufe bitte nur einmal
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e WATCHTOWER_NOTIFICATIONS=gotify \
    -e WATCHTOWER_NOTIFICATION_GOTIFY_URL="http://192.168.0.10:9009" \
    -e WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN="AtK-ng2RqaORpUt" \
    -e WATCHTOWER_MONITOR_ONLY=true \
    -e WATCHTOWER_NOTIFICATIONS_LEVEL="info" \ 
    -e WATCHTOWER_RUN_ONCE=true \
    containrrr/watchtower

#Laufe bitte jeden Tag um 4 Uhr einmal
docker run -d \
    --name watchtower \
    -v /var/run/docker.sock:/var/run/docker.sock \
    -e WATCHTOWER_NOTIFICATIONS=gotify \
    -e WATCHTOWER_NOTIFICATION_GOTIFY_URL="http://192.168.0.10:9009" \
    -e WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN="AtK-ng2RqaORpUt" \
    -e WATCHTOWER_MONITOR_ONLY=true \
    -e WATCHTOWER_NOTIFICATIONS_LEVEL="info" \ 
    -e WATCHTOWER_SCHEDULE="0 0 4 * * *" \
    containrrr/watchtower

Starte den Container detached (-d), sodass keine Informationen beim erstellen und betreiben des Containers in der Konsole ausgegeben werden.
Gib Deinem Watchtower Container einen Namen mit dem Tag --name watchtower.

Unter den Eviroment Variabeln setzt Du jetzt die wichtigen Informationen. Was soll der Container machen und wie soll er es ausführen.

Für die Gotify-Benachrichtigung wird die Variable WATCHTOWER_NOTIFICATIONS auf gotify gesetzt.
Im Anschluss vergibst Du die URL (WATCHTOWER_NOTIFICATION_GOTIFY_URL) Deines Gotify Servers und auch den Token (WATCHTOWER_NOTIFICATION_GOTIFY_TOKEN), welchen Du zu vor mit Deiner Applikation erstellt hast.

Wenn Du Deine Container nur monitoren / beobachten möchtest, dann wird die Variable WATCHTOWER_MONITOR_ONLY auf true gesetzt.
Wie tief die Informationen sein sollen, über die Du benachrichtigt werden möchtest gibst Du unter WATCHTOWER_NOTIFICATIONS_LEVEL an.

Das WATCHTOWER_SCHEDULE wird genutzt, um anzugeben, wie oft Watchtower nach neuen Container sehen soll. In diesem Format kann man dem Container sagen, wann und wie oft er die Container prüfen soll. Mehr Informationen findest Du hier. Somit wird in diesem Beispiel jeden Tag um 4 Uhr geprüft.
Und das WATCHTOWER_RUN_ONCE lässt den Container einmal laufen.

Ganz am Ende musst Du noch das Image angeben, mit welchem der Watchtower Container gebaut werden soll.

Wenn Dein Watchtower gestartet ist, soltest Du folgende Meldung erhalten:

Gotify - Watchtower ist gestartet.
Gotify – Watchtower ist gestartet.

Zum Ende hin, wenn der Watchtower Container einmal alle Container durchgegangen ist, bekommst Du eine weitere Mitteilung, welche wie der Log aussieht. Hier werden dann die einzelnen Container-ID´s und dazugehörigen Images aufgeführt, welche ein neueres Image besitzen.

Titelbild von Watchtower und Gotify