Zum Hauptinhalt springen
S-EDV news
← Alle Anleitungen
📘 Anleitung UGREEN NAS 04.11.2026 · 10 min Lesezeit

UGREEN NAS: What's Up Docker für sichere Container-Updates

Teil 69 der UGREEN-Serie: What's Up Docker 9.7 auf der UGREEN NAS mit Pflicht-Anmeldung, Freigabe per Label, Tag-Filter, Probemodus und dem Trigger dockercompose, der auch die Compose-Datei aktualisiert.

Geprüft am 04.11.2026 · für UGOS Pro 1.21.0.0190, What's Up Docker 9.7.0

WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Titelbild Teil 69: What's Up Docker auf der UGREEN NAS

What's Up Docker, kurz WUD, prüft regelmäßig, ob es für Ihre Container neuere Images gibt, zeigt die Updates in einer Weboberfläche an und spielt sie auf Wunsch ein. Diese Anleitung richtet WUD 9.7 auf der UGREEN NAS so ein, dass es nur ausgewählte Container beobachtet, Updates zuerst im Probemodus testet und die Compose-Datei mitpflegt. Denn in unserem Test setzte ein einfaches docker compose up -d ein Update, das WUD mit dem falschen Trigger eingespielt hatte, sofort wieder zurück.

Getestet auf einer UGREEN DXP4800 Pro mit UGOS Pro 1.21.0.0190 und Docker 29.6.2, mit WUD 9.7.0 im Image getwud/wud und einem Demo-Container mit nginx. Unser Testkonto hieß sedv.

Voraussetzungen

Wie sich WUD von Diun und Renovate unterscheidet, zeigt unser Vergleich der Watchtower-Nachfolger. Hier geht es um die Einrichtung auf der UGREEN NAS.

Schritt 1: Ordner und Administrator anlegen

Ohne Administrator startet WUD 9.7 nicht. Unser erster Start ohne Zugangsdaten endete in einer Schleife von Neustarts mit dieser Meldung:

Error: Authentication is mandatory: No administrator user found. Please set WUD_AUTH_ADMIN_USER and WUD_AUTH_ADMIN_PASSWORD, or configure WUD_AUTH_OIDC_{name}_ADMINGROUP.

Legen Sie deshalb zuerst den Projektordner und eine Datei für die Zugangsdaten an. Passen Sie volume2 an Ihre NAS an, auf vielen Geräten ist es volume1:

sudo mkdir -p /volume2/docker/wud
cd /volume2/docker/wud
sudo nano wud.env
WUD_AUTH_ADMIN_USER=sedv
WUD_AUTH_ADMIN_PASSWORD=IHR_KENNWORT
sudo chmod 600 wud.env

Verwenden Sie im Kennwort keinen Doppelpunkt, das unterstützt WUD laut Dokumentation nicht, und kein Dollarzeichen, das Compose als Variable liest. WUD legt das Konto beim Start aus diesen Werten an und speichert das Kennwort als bcrypt-Hash in seiner Datenbank. Lassen Sie wud.env deshalb liegen. Weitere Konten mit den Rollen admin, rw oder ro legen Sie laut Dokumentation in der Weboberfläche an.

Verifizieren: ls -la zeigt wud.env mit -rw-------.

Schritt 2: Die Compose-Datei schreiben

Legen Sie im selben Ordner mit sudo nano compose.yaml diese Datei an:

services:
  wud:
    image: getwud/wud:9.7.0
    container_name: wud
    restart: unless-stopped
    env_file: wud.env
    environment:
      - TZ=Europe/Berlin
      - WUD_WATCHER_LOCAL_WATCHBYDEFAULT=false
      - WUD_WATCHER_LOCAL_CRON=0 */6 * * *
      - WUD_TRIGGER_DOCKERCOMPOSE_STACK_AUTO=false
      - WUD_TRIGGER_DOCKERCOMPOSE_STACK_BACKUP=true
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - ./store:/store
      - /volume2/docker:/volume2/docker
    ports:
      - "3010:3000"
    labels:
      - wud.watch=false

Die wichtigsten Punkte:

  • docker.sock: WUD braucht Zugriff auf Docker, um Container zu sehen und zu ersetzen. Damit hat der Container praktisch Administratorrechte auf der NAS. WUD spricht ab Werk nur HTTP, das Kennwort geht also unverschlüsselt durchs Netz. Nutzen Sie WUD nur im Heimnetz oder hinter einem Reverse Proxy mit HTTPS und geben Sie Port 3010 nie ins Internet frei.
  • WATCHBYDEFAULT=false: WUD beobachtet nur Container, die Sie mit einem Label freigeben. Ohne diese Zeile prüft es alle Container der NAS.
  • CRON: Ab Werk prüft WUD stündlich. Docker Hub begrenzt Abrufe ohne Anmeldung je IP-Adresse, alle sechs Stunden zu prüfen schont dieses Kontingent.
  • Trigger stack: ein Trigger vom Typ dockercompose, der Compose-Projekte aktualisiert und vorher die Compose-Datei sichert. AUTO=false heißt, dass er nur läuft, wenn Sie ein Update anstoßen. Warum wir nicht den Trigger docker nehmen, zeigt Schritt 5.
  • /volume2/docker: Den Ordner mit Ihren Compose-Projekten binden Sie unter demselben Pfad ein. WUD liest den Pfad der Compose-Datei aus dem Label com.docker.compose.project.config_files, das Compose an jeden Container hängt. WUD kann damit alle Dateien in diesem Ordner lesen und schreiben, auch Ihre env-Dateien und die Datenordner Ihrer Container. Wollen Sie das eingrenzen, binden Sie nur die Projektordner ein, die WUD aktualisieren soll, wie wir es im Test mit einem einzelnen Ordner getan haben.
  • Festes Tag 9.7.0 und wud.watch=false: WUD selbst aktualisieren Sie von Hand.

Prüfen Sie vorher, ob Port 3010 frei ist. Keine Ausgabe bedeutet frei:

sudo ss -ltn | grep :3010

Verifizieren: sudo docker compose config --quiet bleibt ohne Ausgabe.

Schritt 3: Starten und anmelden

sudo docker compose up -d
sudo docker logs wud 2>&1 | grep auth-bootstrap
[auth-bootstrap] Bootstrapping administrator user 'sedv' from environment

Das Image war bei uns 379 MB groß, im Betrieb belegte WUD rund 120 MiB Arbeitsspeicher. Es bringt eine eigene Gesundheitsprüfung mit, die alle 30 Sekunden die Adresse /health abfragt, mehr dazu in Docker Compose absichern. Öffnen Sie http://ADRESSE-DER-NAS:3010 und melden Sie sich mit dem Konto aus wud.env an.

Jedes Mal, wenn wir WUD nach einer Änderung mit docker compose up -d neu erstellt hatten, mussten wir uns neu anmelden.

Verifizieren: Die Anmeldung klappt, und die Startseite zeigt unter Containers noch 0, weil Sie noch keinen Container freigegeben haben.

Schritt 4: Container freigeben und Tags filtern

Legen Sie das Projekt, das WUD beobachten soll, in einem eigenen Ordner unter /volume2/docker an, etwa /volume2/docker/web, und starten Sie es dort mit sudo docker compose up -d. Geben Sie den Container mit dem Label wud.watch=true frei. Damit WUD nur echte Versionen vorschlägt und nicht latest, mainline oder Testversionen, setzen Sie einen Filter für die Tags. Unser Demo-Container lief mit nginx 1.28.0-alpine:

services:
  web:
    image: nginx:1.28.0-alpine
    container_name: web
    restart: unless-stopped
    labels:
      - wud.watch=true
      - wud.tag.include=^\d+\.\d+\.\d+-alpine$$

Der Ausdruck erlaubt nur Tags aus drei Zahlen mit der Endung -alpine. Das doppelte Dollarzeichen ist nötig, weil Compose ein einzelnes $ als Variable liest. Klicken Sie in der Liste Containers auf Watch now, damit WUD sofort prüft. WUD bot uns daraufhin 1.31.8-alpine als neueste passende Version an. In den Bildern heißt der Demo-Container s-edv-wud-demo, die zweite Zeile ist ein weiterer Container mit dem Tag latest.

WUD Startseite mit verfügbarem Update und Zahl der Container
Startseite von WUD: 1 Hinweis auf ein verfügbares Update, 2 Zahl der beobachteten Container, 3 Zahl der eingerichteten Trigger.
WUD Liste der Container mit laufender Version und verfügbarem Update
Liste der Container: 1 laufende Version 1.28.0-alpine, 2 verfügbares Update 1.31.8-alpine, 3 Menü mit Update container.

Bei Images von Docker Hub mit Tags wie latest prüft WUD ab Werk auch den Digest nicht, um das Abrufkontingent zu schonen. Solche Container zeigen deshalb Up to date, auch wenn es ein neueres Image gibt. Feste Versions-Tags mit Filter sind deshalb die bessere Wahl.

Verifizieren: sudo docker inspect web --format '{{index .Config.Labels "com.docker.compose.project.config_files"}}' zeigt einen Pfad unter /volume2/docker, und in der Liste Containers steht web mit dem Update daneben.

Schritt 5: Warum der Trigger docker nicht reicht

WUD kennt zwei Trigger, die Updates einspielen: docker und dockercompose. Wir haben zuerst docker getestet. Über das Menü des Containers und Update container zeigt WUD die alte und die neue Version und unter Target trigger den Trigger, der das Update ausführt.

WUD Dialog Update container mit alter und neuer Version und Trigger
Dialog Update container aus unserem ersten Test: 1 laufende und verfügbare Version, 2 der ausführende Trigger, hier docker (test), 3 Update.

Der Trigger docker ersetzte den Container zuverlässig durch einen neuen mit nginx 1.31.8-alpine. In der Compose-Datei stand aber weiter 1.28.0-alpine. Das nächste sudo docker compose up -d im Projektordner erstellte den Container deshalb wieder mit der alten Version, das Update war weg. Für Container aus Compose-Projekten richten Sie deshalb nur Trigger vom Typ dockercompose ein. Er ändert zuerst die Zeile image in der Compose-Datei und ersetzt dann den Container. Gibt es beide Typen, schlägt der Dialog den Trigger docker zuerst vor. Laut Dokumentation stoßen Sie mit dem Trigger stack aus Schritt 2 Updates genauso über Update container an.

Verifizieren: Im Dialog Update container steht unter Target trigger dockercompose (stack).

Schritt 6: Automatische Updates erst im Probemodus testen

Für automatische Updates legen Sie einen zweiten Trigger an. So bleibt stack aus Schritt 2 für alle anderen Container von Hand nutzbar. Ergänzen Sie in der compose.yaml von WUD unter environment:

      - WUD_TRIGGER_DOCKERCOMPOSE_AUTO_AUTO=true
      - WUD_TRIGGER_DOCKERCOMPOSE_AUTO_INCLUDEBYDEFAULT=false
      - WUD_TRIGGER_DOCKERCOMPOSE_AUTO_ONCE=false
      - WUD_TRIGGER_DOCKERCOMPOSE_AUTO_BACKUP=true
      - WUD_TRIGGER_DOCKERCOMPOSE_AUTO_DRYRUN=true

Mit INCLUDEBYDEFAULT=false gilt der Trigger auto nur für Container, die Sie ausdrücklich freigeben. Das tun Sie mit einem weiteren Label im Projekt web:

    labels:
      - wud.watch=true
      - wud.tag.include=^\d+\.\d+\.\d+-alpine$$
      - wud.trigger.dockercompose.auto.enabled=true

Erstellen Sie WUD und web mit sudo docker compose up -d neu. DRYRUN=true ist der Probemodus. Beim nächsten Lauf lud WUD bei uns das neue Image herunter, ließ aber Compose-Datei und Container unverändert:

[trigger.dockercompose.auto] Processing compose file: /volume2/docker/s-edv-wud/compose.yaml
[trigger.dockercompose.auto] Do not replace existing docker-compose file /volume2/docker/s-edv-wud/compose.yaml (dry-run mode enabled)

Zu ONCE ein Stolperstein aus unserem Test: Ab Werk steht ONCE auf true, und WUD löst dann nur für Updates aus, die es in einem Lauf neu findet. Für ein Update, das schon beim ersten Prüfen vorlag, lief der automatische Trigger bei uns deshalb nie, auch nicht in den folgenden Läufen. Mit ONCE=false führt WUD ihn bei jedem Lauf für alle freigegebenen Container aus, für die ein Update ansteht.

Verifizieren: sudo docker logs wud 2>&1 | grep dry-run zeigt die Meldung, und in der Compose-Datei steht weiter die alte Version.

Schritt 7: Den Probemodus abschalten

Entfernen Sie die Zeile mit DRYRUN=true und erstellen Sie WUD neu. Beim nächsten Lauf spielte WUD das Update bei uns ein:

[trigger.dockercompose.auto] Container s-edv-wud-demo recreated on new image with success
[trigger.dockercompose.auto] Container s-edv-wud-demo started with success

Vorher legte WUD wegen BACKUP=true eine Kopie der Compose-Datei an. Der Vergleich zeigt genau die geänderte Zeile:

sudo diff compose.yaml.back compose.yaml
<     image: nginx:1.28.0-alpine
---
>     image: nginx:1.31.8-alpine

Ein anschließendes docker compose up -d behielt die neue Version.

WUD Liste nach dem Update mit Version 1.31.8-alpine
Nach dem Update: 1 laufende Version 1.31.8-alpine, 2 Up to date.

Datenbanken gehören nie in automatische Updates. In Teil 75 hob ein automatisches Update PostgreSQL von Version 14 auf 18, und die Datenbank startete danach nicht mehr. Setzen Sie bei Datenbanken kein Label für den Trigger auto. Damit WUD nur Updates innerhalb der Hauptversion anzeigt, begrenzen Sie die Tags nach demselben Muster wie in Schritt 4, für PostgreSQL 16 etwa mit einem Ausdruck wie ^16\.\d+$$. Wollen Sie einen Container gar nicht sehen, setzen Sie wud.watch=false.

Verifizieren: In der Compose-Datei steht die neue Version, daneben liegt compose.yaml.back, und die Liste Containers zeigt Up to date.

Typische Fehler

  • WUD startet ständig neu: Authentication is mandatory. WUD_AUTH_ADMIN_USER und WUD_AUTH_ADMIN_PASSWORD fehlen.
  • Update ist nach compose up wieder weg: Der Trigger docker ändert die Compose-Datei nicht. Nur Trigger dockercompose einrichten.
  • dockercompose findet die Datei nicht: Der Pfad aus dem Label com.docker.compose.project.config_files liegt nicht im eingebundenen Ordner. Ordner unter demselben Pfad einbinden oder laut Dokumentation PATHMAPPING_HOST und PATHMAPPING_CONTAINER des Triggers setzen.
  • Automatisches Update läuft nicht: Das Update lag schon beim ersten Prüfen vor, und ONCE steht auf true. ONCE=false setzen.
  • WUD schlägt latest oder Testversionen vor: wud.tag.include mit einem Regex setzen.
  • Nach einer Änderung abgemeldet: Beim Neuerstellen des Containers verliert WUD die Anmeldung. Neu anmelden.

Häufige Fragen

Kann WUD mich benachrichtigen?

Ja, laut Dokumentation bringt WUD Trigger für Benachrichtigungen mit, etwa für Telegram, ntfy, Gotify, E-Mail per SMTP und Uptime Kuma. Sie richten sie wie den Trigger dockercompose über Variablen der Form WUD_TRIGGER_TYP_NAME ein. Wie Sie Dienste mit Uptime Kuma überwachen, zeigt Teil 68.

Wie aktualisieren Sie WUD selbst?

Wegen wud.watch=false meldet WUD keine eigenen Updates. Neue Versionen finden Sie auf der Releases-Seite bei GitHub. Lesen Sie die Versionshinweise, ändern Sie das Tag in der Compose-Datei und starten Sie neu:

sudo docker compose pull
sudo docker compose up -d

Was gehört in die Sicherung?

Der Ordner store mit der Datenbank von WUD und die Dateien compose.yaml und wud.env. Wie Sie Docker-Daten sichern, zeigt Teil 61.

Fazit

WUD zeigt auf der UGREEN NAS zuverlässig, welche Container veraltet sind, und braucht dafür rund 120 MiB Arbeitsspeicher. Sicher wird es mit wenigen Regeln: nur freigegebene Container beobachten, Tags filtern, für Compose-Projekte nur den Trigger dockercompose nehmen und automatische Updates erst im Probemodus testen. Automatische Updates schalten Sie nur für einzelne, unkritische Container ein, Datenbanken bleiben außen vor.

Weiterführende Anleitungen und Quellen

UGREENUGREEN NASDockerWhat's Up DockerContainer-UpdatesUGOS Pro