Hallo Marcus!
Erstmal herzlich Willkommen.
Ich habe irgendwo noch eine Anleitung dazu, ich muss sie nur ein wenig abändern.
Anleitung:
Das ist ein bekanntes Problem. Die Entwickler von Immich haben das Basis-Image für die Datenbank von PostgreSQL 15 auf PostgreSQL 16 angehoben.
Da PostgreSQL Standard-Datenverzeichnisse nicht automatisch über Hauptversionen hinweg aktualisiert, verweigert der Container den Dienst.
Keine Sorge, deine Daten sind nicht verloren. Am sichersten und schnellsten löst du das Problem, indem du die Datenbank temporär noch einmal mit der alten Version startest, ein Backup ziehst und dieses in die neue Version einspielst.
Hier ist die Schritt-für-Schritt-Anleitung, wie du das machst:
Schritt 1: Stack stoppen und altes Image erzwingen
Ändere in deiner docker-compose.yml temporär das Image der Datenbank zurück auf die Version 15.
Ersetze die Zeile bei database:
# Ändere das von: tensorchord/pgvecto-rs:pg16-v0.2.0
# Vorübergehend zu:
image: tensorchord/pgvecto-rs:pg15-v0.2.0
Starte den Datenbank-Container nun einmalig separat:
docker compose up -d database
Der Container sollte jetzt wieder fehlerfrei starten, da die Version zu deinen Daten passt.
Schritt 2: Datenbank-Backup (Dump) erstellen.
Erstelle nun eine Sicherung der Datenbank direkt aus dem laufenden Container heraus.
Nutze dazu folgenden Befehl:
docker exec -t immich_postgres pg_dumpall -c -U postgres > immich_db_backup.sql
Hinweis: Überprüfe danach mit ls -lh immich_db_backup.sql, ob die Datei Text enthält.
Schritt 3: Alten Container stoppen und Datenverzeichnis leeren:
Stoppe den Stack komplett:
docker compose down
Da wir die Daten gleich aus dem Backup wiederherstellen, müssen wir das alte, inkompatible Datenverzeichnis löschen. Wenn du ein benanntes Docker-Volume (pgdata) nutzt, kannst du es so löschen:
docker volume rm dein-projektname_pgdata
(Falls du einen lokalen Pfad wie ./postgres gemappt hast, lösche einfach den Inhalt dieses Ordners).
Schritt 4: Docker-Compose auf PostgreSQL 16 umstellen:
Öffne deine docker-compose.yml wieder und stelle das Image zurück auf den aktuellen Standard für Version 16:
image: tensorchord/pgvecto-rs:pg16-v0.2.0
Starte den Datenbank-Container nun clean neu, damit er ein leeres, frisches PostgreSQL 16 Verzeichnis initialisiert:
docker compose up -d database
Schritt 5: Backup in die neue Version einspielen:
Jetzt spielst du das vorhin erstellte Backup in den neuen PostgreSQL 16 Container ein:
cat immich_db_backup.sql | docker exec -i immich_postgres psql -U postgres
Das Tool wird einige Fehlermeldungen anzeigen, dass bestimmte Tabellen oder Rollen bereits existieren – das ist normal und kann ignoriert werden, da der Container beim ersten Start bereits die Standardstruktur angelegt hat.
Schritt 6: Gesamten Stack startenJetzt kannst du den restlichen Immich-Stack wieder komplett hochfahren:
docker compose up -d
Nach ein paar Sekunden sollte dein Web-Interface wieder wie gewohnt erreichbar sein und alle deine Bilder sind noch da!
Gib kurz Bescheid, ob alles geklappt hat!