Volume-Berechtigungen stimmen nicht

Alert: VolumeUidAuditMismatch
Warning · selten dringend Wöchentlich (Mi 06:00)
Kein Notfall — aber nicht länger als eine Woche ignorieren. Wenn der nächste Container-Neustart kommt (z.B. nach docker compose pull), kann es zu stillem Datenverlust kommen.

Was bedeutet das?

Ein Docker-Container braucht zur Laufzeit ein Verzeichnis oder Volume auf dem Host (z.B. für seine Logs oder seine Datenbank). Der Audit hat gefunden: das Verzeichnis fehlt oder gehört einem anderen Benutzer als der Container selbst.

Beispiel: Der Container tasmota läuft intern als User 1000 und will nach /app/logs schreiben. Wenn das gemountete Host-Verzeichnis /srv/eplamat/tasmota-updater/logs aber dem User root gehört (UID 0) — oder gar nicht existiert — kann er nicht schreiben.

⚠️Wie schlimm ist es?

Aktuell läuft alles weiter. Bind-Mounts werden beim Container-Start an einen Inode gebunden — solange der Container nicht neu startet, merkt er das Problem nicht.

Beim nächsten Neustart (z.B. weil das wöchentliche Image-Update Mi 04:00 läuft) bindet Docker an die neue Host-Situation. Ergebnis: Container kann nicht mehr schreiben, schweigt aber. Logs, Metriken oder Konfigs gehen still verloren.

Deshalb: vor dem nächsten Mittwoch fixen.

🔧Was tun?

  1. Audit von Hand laufen lassen, um die echten Treffer zu sehen:
    sudo systemctl start eplamat-volume-audit.service
    journalctl -u eplamat-volume-audit.service --since "2 minutes ago" \
      | grep -E "MISMATCH|FAIL:"
    Du siehst Zeilen wie tasmota | 1000 | /srv/.../logs | ? | MISMATCH. Wichtig sind die Spalten: Container | Container-UID | Host-Pfad | Owner-UID.
  2. Für jedes Mismatch: Verzeichnis auf dem Host anlegen (falls fehlt) und auf die richtige UID setzen:
    sudo mkdir -p <HOST-PFAD>
    sudo chown <CONTAINER-UID>:<CONTAINER-UID> <HOST-PFAD>
    touch <HOST-PFAD>/.gitkeep   # pinnt im Repo, verhindert Re-Auftauchen
  3. Container neu erstellen (Recreate, nicht nur Restart — sonst behält Docker den alten Mount-Inode):
    cd /srv/eplamat
    docker compose up -d --force-recreate <SERVICE-NAME>
  4. Audit erneut triggern, Metrik muss auf 0 gehen:
    sudo systemctl start eplamat-volume-audit.service
    curl -s http://localhost:9092/metrics | grep volume_uid_audit_mismatches
    # erwartet:  volume_uid_audit_mismatches{...} 0
  5. Der Alert cleared nach ca. 5 Minuten (Prometheus for: 5m-Fenster).

🆘Wenn das nicht klappt

Kopier diesen Alert mit dem Link einfach in einen Claude-Chat und frag nach Hilfe. Claude hat Zugriff auf den Server und kann das mit dir zusammen durchgehen.

Suchpfad in CLAUDE.md: § Named-Volume UID-Mismatch silent data loss.