Zum Inhalt

Docker-Updates mit DIUN und ntfy melden

Veröffentlicht am 9. August 2026 · Geschätzte Lesezeit: 4 Minuten

DIUN prüft die Images ausgewählter Docker-Container und meldet, wenn sich ein Tag oder Digest in der Registry geändert hat. Es installiert Updates nicht selbst, sondern lässt dir Zeit für Backup und kontrollierte Aktualisierung. Mit einer vorhandenen ntfy-Instanz ist die Einrichtung in etwa 15 Minuten erledigt.

Voraussetzungen

  • Ein Linux-Server mit Docker und Docker Compose
  • Eine erreichbare ntfy-Instanz und ein eigenes Thema
  • SSH-Zugriff und ein Benutzer mit sudo-Rechten
  • Ausgehender Internetzugriff zu den verwendeten Image-Registries

1. ntfy-Thema vorbereiten

Lege in deiner ntfy-Instanz ein schwer zu erratendes Thema für Update-Meldungen an und abonniere es in der ntfy-App oder im Browser. Notiere die Basisadresse und den Themennamen:

Adresse: http://<ntfy-ip>:<ntfy-port>
Thema: <ntfy-thema>

Ersetze <ntfy-ip>, <ntfy-port> und <ntfy-thema> durch deine Werte. Ist das Thema geschützt, erzeuge in ntfy zusätzlich einen Zugriffstoken.

Öffentliche Themen sind keine Zugangskontrolle

Bei ntfy.sh kann jeder, der den Themennamen kennt, Nachrichten lesen oder senden. Verwende einen langen zufälligen Namen oder besser eine eigene ntfy-Instanz mit Zugriffsschutz.

2. Arbeitsordner anlegen

Führe diese Befehle auf dem Docker-Server aus:

sudo mkdir -p /opt/diun/data
sudo chown -R "$USER":"$USER" /opt/diun
cd /opt/diun

3. Benachrichtigungsdaten speichern

Erstelle /opt/diun/.env. Ersetze alle Platzhalter. Wenn dein ntfy-Thema keinen Token verwendet, entfernst du die komplette letzte Zeile.

NTFY_ENDPOINT=http://<ntfy-ip>:<ntfy-port>
NTFY_TOPIC=<ntfy-thema>
NTFY_TOKEN=<ntfy-zugriffstoken>

Schütze die Datei vor anderen Benutzern:

chmod 600 /opt/diun/.env

4. Compose-Datei erstellen

Erstelle /opt/diun/compose.yaml mit folgendem Inhalt. DIUN prüft hier alle sechs Stunden, beobachtet aber nur Container mit dem Label diun.enable=true.

services:
  diun:
    image: crazymax/diun:latest
    container_name: diun
    command: serve
    restart: unless-stopped
    env_file:
      - .env
    environment:
      TZ: "Europe/Berlin"
      LOG_LEVEL: "info"
      LOG_JSON: "false"
      DIUN_WATCH_WORKERS: "10"
      DIUN_WATCH_SCHEDULE: "0 */6 * * *"
      DIUN_WATCH_JITTER: "30s"
      DIUN_PROVIDERS_DOCKER: "true"
      DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT: "false"
      DIUN_NOTIF_NTFY_ENDPOINT: "${NTFY_ENDPOINT}"
      DIUN_NOTIF_NTFY_TOPIC: "${NTFY_TOPIC}"
      DIUN_NOTIF_NTFY_TOKEN: "${NTFY_TOKEN:-}"
      DIUN_NOTIF_NTFY_PRIORITY: "3"
      DIUN_NOTIF_NTFY_TAGS: "whale"
    volumes:
      - ./data:/data
      - /var/run/docker.sock:/var/run/docker.sock:ro
    labels:
      - "diun.enable=true"

Das Label am DIUN-Container sorgt dafür, dass zunächst wenigstens das DIUN-Image selbst beobachtet wird. DIUN benötigt den Docker-Socket nur lesend, um Container und verwendete Images zu finden.

Docker-Socket besonders schützen

Zugriff auf den Docker-Socket ist sicherheitskritisch. Installiere nur das offizielle Image, veröffentliche keine DIUN-Dienste im Internet und entferne die Socket-Einbindung nicht aus dem Blick bei einer Sicherheitsprüfung.

5. DIUN starten und Meldung testen

Prüfe und starte den Stack:

cd /opt/diun
docker compose config --quiet
docker compose up -d

Sende anschließend eine Testmeldung über die laufende DIUN-Instanz:

docker compose exec diun diun notif test

Die Meldung sollte nach wenigen Sekunden im abonnierten ntfy-Thema erscheinen. Kontrolliere zusätzlich die Protokolle:

docker compose logs --tail=100 diun

6. Weitere Container auswählen

Öffne die compose.yaml eines Containers, dessen Image du überwachen möchtest, und ergänze im betreffenden Dienst dieses Label:

labels:
  - "diun.enable=true"

Übernimm die Änderung im Arbeitsordner dieses Stacks:

docker compose up -d

Beim nächsten Prüflauf erkennt DIUN das verwendete Image. Wiederhole das nur bei Containern, für die du Updatehinweise wirklich benötigst.

Hinweis ist noch kein Updatebefehl

Lies vor jeder Aktualisierung die Versionshinweise, erstelle ein Backup und aktualisiere den betroffenen Stack anschließend bewusst mit docker compose pull und docker compose up -d.

7. Beobachtete Images kontrollieren

Zeige alle aktuell in der DIUN-Datenbank erfassten Images an:

cd /opt/diun
docker compose exec diun diun image list

Fehlt ein erwartetes Image, prüfe das Label und starte den betreffenden Container mit seiner Compose-Datei neu. Warte danach auf den nächsten Prüflauf.

8. Backup und Rückweg

Stoppe DIUN kurz und sichere Konfiguration und Datenbank:

cd /opt/diun
docker compose down

Erstelle ein geschütztes Backup:

sudo mkdir -p /var/backups
sudo tar -czf "/var/backups/diun-$(date +%F).tar.gz" -C /opt diun

Starte DIUN wieder:

cd /opt/diun
docker compose up -d

Das Archiv kann einen ntfy-Token enthalten und muss geschützt aufbewahrt werden. Zum Entfernen stoppst du DIUN und löschst nur den Ordner /opt/diun. Die überwachten Anwendungen laufen unverändert weiter; deren DIUN-Labels sind harmlos.

9. Aktualisieren und Fehler finden

Aktualisiere DIUN nach einem Backup kontrolliert:

cd /opt/diun
docker compose pull
docker compose up -d
  • Keine Testmeldung: ntfy-Adresse, Thema, Token und Erreichbarkeit aus dem DIUN-Container prüfen.
  • Kein Image gefunden: diun.enable=true muss am beobachteten Dienst stehen; danach dessen Container neu erstellen.
  • Registry-Fehler: Internetzugriff und eventuelle Rate-Limits der Registry prüfen; ein größerer Zeitabstand reduziert unnötige Anfragen.
  • Zu viele Hinweise: Nur wichtige Container labeln und watchByDefault nicht auf true setzen.

10. Quellen und Video

Fertig

DIUN beobachtet nun ausgewählte Docker-Images und meldet Änderungen per ntfy, ohne Container automatisch zu aktualisieren. Die Funktionsprüfung ist bestanden, wenn die Testmeldung ankommt und diun image list mindestens das DIUN-Image zeigt.