Überarbeitet am 8. September 2026.
Meine Nextcloud von einer klassischen Serverinstallation in Docker umzuziehen war damals eines meiner größeren Projekte. Die alte Anleitung funktioniert heute aber nur noch teilweise: Docker Compose wurde noch als einzelne Binärdatei installiert, Containernamen waren fest eincodiert und nebenbei wurde sogar eine längst veraltete Collabora-Konfiguration mit umgezogen.
Heute würde ich den Umzug deutlich sauberer machen: erst sichern, dann auf exakt derselben Nextcloud-Hauptversion in Docker wiederherstellen und erst danach über Updates nachdenken.
Wenn Docker auf dem Zielserver noch nicht eingerichtet ist, findest du hier meine aktuelle Anleitung: Docker und Docker Compose unter Debian und Ubuntu installieren.
Was muss bei einer Nextcloud wirklich mit?
Für eine vollständige Migration reicht es nicht, nur den Nextcloud-Datenordner zu kopieren. Zu einer bestehenden Installation gehören mindestens:
- die Datenbank,
- das Nextcloud-Datenverzeichnis,
config/config.phpund die übrige relevante Konfiguration,- eigene beziehungsweise zusätzliche Apps,
- eigene Themes, falls vorhanden.
Gerade Kalender, Kontakte, Freigaben, App-Einstellungen und viele Metadaten liegen in der Datenbank. Ein reines Kopieren der Dateien wäre deshalb keine vollständige Migration.
1. Quell- und Zielversion müssen zusammenpassen
Das ist einer der wichtigsten Punkte. Wenn auf dem alten Server beispielsweise Nextcloud Hauptversion X läuft, würde ich auf dem Docker-Ziel zunächst ebenfalls ein Image dieser Hauptversion verwenden.
Ich würde einen Serverumzug nicht gleichzeitig als Sprung über mehrere Nextcloud-Hauptversionen benutzen. Das offizielle Docker-Image unterstützt Upgrades nur jeweils um eine Hauptversion. Erst die Migration sauber abschließen, anschließend kontrolliert aktualisieren.
2. Vollständiges Backup erstellen
Bevor irgendetwas verändert wird, kommt ein vollständiges Backup. Ich schalte Nextcloud dafür zuerst in den Wartungsmodus:
sudo -E -u www-data php /var/www/nextcloud/occ maintenance:mode --on
Danach sichere ich Datenbank, Konfiguration und Datenverzeichnis. Bei MariaDB/MySQL kann ein Dump beispielsweise so erstellt werden:
mysqldump --single-transaction --routines --triggers \
-u nextcloud -p nextcloud > nextcloud.sql
Zusätzlich sichere ich mindestens:
/var/www/nextcloud/config/
/DEIN/NEXTCLOUD-DATENVERZEICHNIS/
/var/www/nextcloud/custom_apps/
/var/www/nextcloud/themes/
Wo dein Datenverzeichnis tatsächlich liegt, siehst du in der config.php beim Eintrag datadirectory. Falls du Daten auf eine andere Platte verschieben möchtest, habe ich dafür inzwischen eine separate Anleitung: Nextcloud-Datenverzeichnis sicher per Bind Mount verschieben.
3. Docker-Umgebung aufbauen
Auf dem Zielsystem definiere ich die komplette Infrastruktur in einer compose.yaml. Für eine typische Installation sind das mindestens Nextcloud und eine Datenbank; Redis würde ich ebenfalls direkt mit einplanen.
Ein stark vereinfachtes Grundgerüst kann so aussehen:
services:
db:
image: mariadb:11.8
restart: unless-stopped
env_file:
- db.env
volumes:
- ./db:/var/lib/mysql
redis:
image: redis:alpine
restart: unless-stopped
app:
image: nextcloud:DEINE_HAUPTVERSION-apache
restart: unless-stopped
depends_on:
- db
- redis
ports:
- "127.0.0.1:8080:80"
volumes:
- ./nextcloud:/var/www/html
DEINE_HAUPTVERSION ersetzt du bewusst durch die Version, die zu deiner bestehenden Installation passt. Für produktive Setups würde ich außerdem Passwörter und Secrets nicht direkt in die Compose-Datei schreiben.
Die genaue Struktur kann natürlich anders aussehen – etwa mit externem Datenverzeichnis, separaten Volumes oder FPM statt Apache. Entscheidend ist, dass die persistenten Daten nicht nur im flüchtigen Container liegen.
4. Basis einmal erstellen
Das offizielle Nextcloud-Docker-Projekt empfiehlt bei der Migration, die neue Infrastruktur zunächst einmal mit Compose aufzubauen. Dadurch entstehen die benötigten Volumes und die Datenbankumgebung:
docker compose up -d
Anschließend stoppe ich die App wieder beziehungsweise verhindere, dass parallel schon Benutzer mit der leeren Installation arbeiten, während die alten Daten eingespielt werden.
5. Datenbank wiederherstellen
Die vorhandene Nextcloud-Datenbank muss jetzt in den neuen Datenbankcontainer. Das offizielle Docker-Projekt zeigt dafür einen robusten Weg: Dump in den Container kopieren und dort importieren.
docker compose cp ./nextcloud.sql db:/nextcloud.sql
Der eigentliche Import hängt von Benutzername, Datenbankname und Datenbanktyp ab. Bei MariaDB/MySQL wird der Dump anschließend mit dem Datenbank-Client in die vorbereitete Nextcloud-Datenbank eingelesen. Passwörter würde ich dabei nicht als Beispielwert in die Shell-History schreiben, sondern aus der eigenen sicheren Konfiguration verwenden.
6. config.php übernehmen und Docker-Pfade anpassen
Jetzt kommt die bestehende config.php in die Docker-Installation. Besonders der Datenbankhost ändert sich häufig. Wenn der Compose-Dienst db heißt, sieht der Eintrag beispielsweise so aus:
'dbhost' => 'db:3306',
Außerdem prüfe ich trusted_domains, Reverse-Proxy-Einstellungen, Redis und datadirectory. Die Pfade müssen aus Sicht des Containers stimmen – nicht aus Sicht des Hosts.
7. Daten und Custom Apps übernehmen
Die Nutzerdaten werden jetzt in das vorgesehene persistente Volume beziehungsweise den eingebundenen Host-Pfad kopiert. Dateirechte und Zeitstempel sollten erhalten bleiben.
Eigene Apps kopiere ich nur dann mit, wenn ich sie wirklich noch brauche. Normale Apps aus dem Nextcloud App Store lassen sich oft sauber neu installieren. Alte, seit Jahren ungepflegte Apps möchte ich nicht automatisch in die neue Umgebung mitschleppen.
8. Nextcloud starten und mit OCC prüfen
docker compose up -d
Danach kontrolliere ich zuerst die Container:
docker compose ps
docker compose logs --tail 100 app
OCC wird im Container ausgeführt:
docker compose exec -u www-data app php occ status
Wenn alles stimmt, kann der Wartungsmodus in der neuen Installation beendet werden:
docker compose exec -u www-data app php occ maintenance:mode --off
9. Cron richtig einrichten
Meine alte Anleitung hatte für einzelne Apps mehrere selbstgebastelte Cronjobs. Das würde ich heute nicht mehr als Standard empfehlen. Nextcloud selbst braucht einen regelmäßig ausgeführten cron.php-Job.
Je nach Docker-Aufbau kann dafür ein separater Cron-Container oder ein Host-Cronjob verwendet werden. Entscheidend ist, dass in Nextcloud unter den Grundeinstellungen Cron als Hintergrundjob ausgewählt ist und der Job zuverlässig läuft.
10. Reverse Proxy erst danach sauber anbinden
Ich lasse Nextcloud im Beispiel nur auf 127.0.0.1:8080 lauschen und setze davor meinen normalen Nginx-Reverse-Proxy mit HTTPS. So muss der Container nicht selbst öffentlich Port 80 oder 443 übernehmen.
Bei einem Reverse Proxy müssen insbesondere Host, Protokoll und echte Client-IP korrekt an Nextcloud weitergereicht werden. Mehr dazu steht auch in meiner aktualisierten Anleitung Nextcloud richtig absichern.
Collabora nicht mehr in diese Migration quetschen
Früher hatte ich in diesem Artikel gleich noch eine Collabora-Nginx-Konfiguration angehängt. Das machte die Anleitung unnötig unübersichtlich und die verwendeten /lool-Pfade sind längst veraltet. Nextcloud Office gehört deshalb in eine eigene Anleitung: Nextcloud Office mit Collabora einrichten.
Erst wenn alles läuft: alte Installation abschalten
Ich würde das alte System nicht sofort löschen. Erst anmelden, Dateien öffnen, Upload testen, Kalender und Kontakte prüfen, Hintergrundjobs kontrollieren und einen neuen Backup-Lauf durchführen.
Wenn die Docker-Installation einige Zeit sauber gelaufen ist und ein Restore-fähiges Backup existiert, kann die alte Installation endgültig außer Betrieb gehen.
Weiterführend: offizielles Nextcloud-Docker-Image und Docker-Dokumentation inklusive Migration bestehender Installationen.

Gedanken dazu 2 Kommentare
@lars In deiner Anleitung fehlt ein Aspekt: Es reicht nicht einfach nur ein Datenbank-Backup einzuspielen. Die Datenbank enthält Pfade auf dem bisherigen Dateisystem (z.B. in oc_storages). Nach einem Umzug in Docker müssen diese Pfade angepasst/aktualisiert werden.
Hi, danke für den Kommentar. Ich hatte selber schon diverse Male Umzüge gemacht auf diese Art und keine Probleme gehabt. Schaue mir das aber nochmal an und ändere den Artikel ggf.
Was denkst du dazu?
Dein Kommentar erscheint nach der Freigabe.