Wo speichert Nextcloud in Docker seine Dateien?
Ermitteln Sie Datenverzeichnis und Host-Pfad von Nextcloud in Docker. Die Anleitung zeigt außerdem, welche Volumes, Datenbank und Konfiguration ein wiederherstellbares Backup benötigen.
Where Nextcloud in Docker stores files
Nextcloud in Docker stores files in a data directory inside the container, and the real location on your server is whichever volume or bind mount you attached to it. With the linuxserver.io image, lscr.io/linuxserver/nextcloud, user files live in /data, and the Nextcloud installation with its config.php lives in /config. Both of those are container paths. One command prints the host path behind them, and the rest of this guide covers the harder half of the question: everything the data directory does not hold.
Pin the image tag. Paths belong to an image rather than to Nextcloud, and a floating tag can move under you. As of August 2026 the current stable tag for this image is 34.0.3.
services:
nextcloud:
image: lscr.io/linuxserver/nextcloud:34.0.3
container_name: nextcloud
environment:
- PUID=1000
- PGID=1000
- TZ=Etc/UTC
volumes:
- nextcloud_config:/config
- nextcloud_data:/data
ports:
- 443:443
restart: unless-stopped
nextcloud-db:
image: mariadb:11.8
container_name: nextcloud-db
environment:
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
- MARIADB_DATABASE=nextcloud
- MARIADB_USER=nextcloud
- MARIADB_PASSWORD=${NEXTCLOUD_DB_PASSWORD}
volumes:
- nextcloud_db:/var/lib/mysql
restart: unless-stopped
volumes:
nextcloud_config:
nextcloud_data:
nextcloud_db:The two passwords come from a .env file next to the compose file, so they stay out of the compose file itself. That is three volumes in the answer, and only one of them holds user files.
Those container paths come from the documentation for that one image. A different Nextcloud image lays out its filesystem differently and keeps the installation under its own web root, so a path copied from a forum post is a guess. Read the truth from the container you are running.
docker inspect nextcloudThe Mounts section of that output lists every mount, with Source on the host side and Destination on the container side. That listing answers the question for your setup, whichever image you chose.
Wie ermittle ich den tatsächlichen Host-Pfad hinter dem Volume?
Ein benanntes Volume wird von Docker verwaltet. Sie wählen seinen Pfad daher nicht selbst aus. Sie lassen ihn sich anzeigen.
docker volume ls
docker volume inspect nextcloud_nextcloud_dataDer Name ist relevant. Docker Compose versieht Volume-Namen mit dem Projektnamen. Dieser entspricht standardmäßig dem Namen des Verzeichnisses, in dem Ihre Compose-Datei liegt. Ein Volume, das in der Datei als nextcloud_data eingetragen ist, liegt auf dem Datenträger daher normalerweise unter nextcloud_nextcloud_data. docker volume ls zeigt die tatsächlichen Namen an. Die gekürzte Ausgabe von inspect sieht so aus:
[
{
"CreatedAt": "2026-08-18T09:12:44Z",
"Driver": "local",
"Mountpoint": "/var/lib/docker/volumes/nextcloud_nextcloud_data/_data",
"Name": "nextcloud_nextcloud_data",
"Scope": "local"
}
]Mountpoint ist die gesuchte Angabe. Lesen Sie sie mit dem Befehl aus, statt sie anzunehmen, weil sich der Pfad ändern kann. Bei rootless Docker liegt das gesamte Docker-Datenverzeichnis im Home-Verzeichnis des Benutzers, unter dessen Konto der Daemon läuft. Der Pfad beginnt dann an einer anderen Stelle.
Ein Bind Mount macht diese Abfrage überflüssig. Tragen Sie - /srv/nextcloud/data:/data in die Compose-Datei ein. Dann entspricht der Host-Pfad dem von Ihnen angegebenen Pfad. docker inspect meldet ihn als Source. Die Wahl ändert mehr als nur den Pfad, weil sich benannte Volumes und Bind Mounts bei Besitzrechten und Backups unterschiedlich verhalten.
Warum das Datenverzeichnis kein Backup ist
Im Nextcloud-Handbuch sind fünf Bestandteile genannt, die ein Backup enthalten muss: der Ordner config, der Ordner für benutzerdefinierte Apps, der Datenordner, der Theme-Ordner und die Datenbank. Bei diesem Image liegen die Ordner config, apps und theme unter /config. Die Datenbank läuft dagegen in einem eigenen Container mit einem eigenen Volume. Wenn Sie nur /data kopieren, sichern Sie den am wenigsten relevanten Teil des Problems.
Die Datenbank ist wichtig, weil die Weboberfläche kein Verzeichnis auflistet. Sie listet Zeilen aus dem File-Cache auf. Deshalb weist das Handbuch an, nach dem manuellen Kopieren von Dateien in das Datenverzeichnis einen Scan auszuführen. Wenn Sie /data neben einer leeren Datenbank wiederherstellen, haben Sie Bytes ohne Index: keine Benutzer, keine Freigaben und keine Dateien in der Dateiliste. Wenn Sie die Datenbank neben einem leeren /data wiederherstellen, verweist jede Zeile auf eine nicht mehr vorhandene Datei.
config.php enthält die Zugangsdaten der Datenbank und die vertrauenswürdigen Domains. Außerdem enthält es die Instanz-ID. Das ist der Name des App-Datenordners innerhalb des Datenverzeichnisses. Fragen Sie die laufende Instanz ab, anstatt einem der beiden Werte aus dem Gedächtnis zu vertrauen.
docker exec -it nextcloud occ config:system:get datadirectory
docker exec -it nextcloud occ config:system:get instanceidDer erste Befehl gibt das Datenverzeichnis aus, das diese Instanz tatsächlich verwendet. Hier ist das /data. Dieses Image stellt einen occ-Wrapper im Pfad bereit. Führen Sie ihn daher direkt über docker exec aus. Übernehmen Sie nicht die längere Form mit sudo und php occ aus dem Nextcloud-Handbuch. Diese Form ist für eine Installation außerhalb eines Containers gedacht.
Was füllt das Datenvolume unbemerkt?
Vorschaubilder und der Verlauf pro Benutzer liegen im selben Volume wie die Dateien. Beide werden in der Speicheranzeige der Weboberfläche nicht berücksichtigt.
- Vorschaubilder sind generierte Miniaturansichten. Sie liegen im App-Datenordner innerhalb des Datenverzeichnisses. Der Ordnername beginnt mit
appdata_, gefolgt von der Instanz-ID. - Gelöschte Dateien bleiben im Papierkorb.
trashbin_retention_obligationist standardmäßig aufautogesetzt. Dadurch bleiben Dateien 30 Tage erhalten und werden erst danach gelöscht, wenn Speicherplatz benötigt wird. Gelöschte Dateien werden weiterhin auf das Benutzerkontingent angerechnet. Wenn das Kontingent überschritten ist, wird die Aufbewahrungseinstellung ignoriert. Der Papierkorb wird dann so lange bereinigt, bis das Kontingent wieder eingehalten wird. - Auch alte Versionen bleiben erhalten.
versions_retention_obligationist ebenfalls standardmäßig aufautogesetzt. Die Versions-App verwendet nie mehr als 50% des aktuell freien Speicherplatzes eines Benutzers. Bei der Bereinigung werden zuerst die ältesten Versionen gelöscht. Die beiden neuesten Versionen bleiben erhalten. Eine Version, die ein Benutzer manuell benannt hat, wird nie gelöscht.
Messen Sie, bevor Sie Daten löschen.
docker exec -it nextcloud sh -c 'du -sh /data/*'
docker exec -it nextcloud sh -c 'du -sh /data/appdata_*'Die erste Zeile nennt eine Zahl für jeden Benutzerordner sowie für den App-Datenordner. Ist die Zahl für die App-Daten groß, sind Vorschaubilder die Ursache. Die folgenden Bereinigungsbefehle sind dokumentiert. Jeder von ihnen löscht absichtlich Daten.
docker exec -it nextcloud occ trashbin:cleanup --all-users
docker exec -it nextcloud occ versions:cleanup alice
docker exec -it nextcloud occ preview:cleanuppreview:cleanup entfernt alle generierten Vorschaubilder. Nextcloud erzeugt sie erneut, sobald Benutzer diese Dateien öffnen. Der Speicherplatz wird daher nach und nach wieder belegt, und die CPU wird dafür belastet. Wenn das Volume nur ein Teil eines größeren Festplattenproblems ist, sind alte Images und veraltete Build-Caches normalerweise der andere Teil.
Warum werden Dateien, die ich auf den Host kopiere, in Nextcloud nicht angezeigt?
Nextcloud liest den Dateicache aus der Datenbank und nicht aus dem Verzeichnis. Durch das Kopieren wurde eine Datei auf dem Datenträger erstellt, ohne dass eine passende Datenbankzeile vorhanden ist. Daher gibt es für die Weboberfläche nichts aufzulisten. Das Handbuch beschreibt genau diesen Fall: Nach dem direkten Kopieren von Dateien in das Datenverzeichnis ist ein Scan erforderlich.
docker exec -it nextcloud occ files:scan --path="/alice/files/Photos"
docker exec -it nextcloud occ files:scan --unscanned -v
docker exec -it nextcloud occ files:scan --allDas Argument --path zeigt außerdem den Aufbau innerhalb des Datenverzeichnisses: Jeder Benutzer hat ein Verzeichnis mit seinem Benutzernamen. Das Verzeichnis files darin enthält die Dateien, die der Benutzer in der Weboberfläche sieht. Scannen Sie einen einzelnen Pfad, wenn der Speicherort der Dateien bekannt ist. --all durchläuft alle Benutzer und benötigt bei einer großen Instanz viel Zeit. --unscanned verarbeitet nur Dateien, die als noch nicht vollständig gescannt markiert sind. -v gibt jede Datei aus, während sie verarbeitet wird. Dadurch erkennen Sie, ob ein Befehl tatsächlich hängt oder weiterläuft.
Die Besitzrechte entscheiden, ob der Scan ausreicht. Wenn der Container-Benutzer eine Datei nicht schreiben kann, wird sie zwar indiziert, kann anschließend aber nicht verschoben werden. Die Dateiliste sieht dann korrekt aus, während das Umbenennen oder Löschen über die Weboberfläche fehlschlägt.
Warum schlagen Schreibvorgänge fehl, nachdem ich PUID und PGID gesetzt habe?
Weil der Kernel Nummern und keine Namen vergleicht. PUID und PGID legen die numerische Benutzer-ID (uid) und Gruppen-ID (gid) fest, unter denen der Containerprozess ausgeführt wird. Jede Datei auf dem Host hat ebenfalls einen numerischen Besitzer. Wenn die beiden Nummern nicht übereinstimmen, wird der Schreibvorgang verweigert, unabhängig davon, wie die Namen auf beiden Seiten aussehen.
docker exec -it nextcloud id abc
sudo ls -ln /var/lib/docker/volumes/nextcloud_nextcloud_data/_dataid abc gibt die uid und gid aus, die der Container tatsächlich verwendet. Das sind die von Ihnen gesetzten PUID und PGID. ls -ln gibt numerische Besitzer aus, und -n ist dabei entscheidend: Das einfache ls -l übersetzt diese Nummern anhand der Benutzerliste des Hosts und zeigt einen Namen an, der innerhalb des Containers keine Bedeutung hat. Vergleichen Sie die beiden Nummern.
Testen Sie anschließend den Schreibvorgang, statt die Ursache zu erraten.
docker exec -u abc -it nextcloud touch /data/writetestEin Permission denied mit der Bezeichnung /data bestätigt die Ursache. Korrigieren Sie den Besitz innerhalb des Containers und führen Sie den gleichen Test erneut aus.
docker exec -u 0 -it nextcloud chown -R abc:abc /data
docker exec -u abc -it nextcloud touch /data/writetest
docker exec -u abc -it nextcloud rm /data/writetestFühren Sie den Befehl aus einem bestimmten Grund innerhalb des Containers aus. Bei rootless Docker werden die Benutzer-IDs des Containers über den untergeordneten Bereich in /etc/subuid abgebildet. Daher entspricht uid 1000 innerhalb des Containers einer deutlich höheren uid auf dem Host. Ein hostseitiges chown 1000:1000 setzt dann einen Besitzer, den der Container nicht verwenden kann, und der Schreibvorgang schlägt weiterhin fehl. Wenn Sie chown innerhalb des Containers ausführen, verwendet der Befehl dieselbe Abbildung wie der Nextcloud-Prozess selbst. Dadurch stimmen die Nummern konstruktionsbedingt überein. Deshalb müssen PUID und PGID mit dem Besitzer auf dem Datenträger übereinstimmen, bevor Sie andere mögliche Ursachen untersuchen.
Wie erstelle ich ein Backup, damit die Wiederherstellung tatsächlich funktioniert?
Sichern Sie die Datenbank und die Verzeichnisse zum selben Zeitpunkt. Der Wartungsmodus verhindert Anmeldungen. Dadurch wird zwischen dem Dump und dem Kopieren keine Datei hochgeladen.
docker exec -it nextcloud occ maintenance:mode --on
docker exec nextcloud-db mariadb-dump --single-transaction -u nextcloud -p"$NEXTCLOUD_DB_PASSWORD" nextcloud > nextcloud-sqlbkp.sql
docker run --rm -v nextcloud_nextcloud_data:/data:ro -v "$PWD":/backup alpine:3.22 tar czf /backup/nextcloud-data.tgz -C /data .
docker run --rm -v nextcloud_nextcloud_config:/config:ro -v "$PWD":/backup alpine:3.22 tar czf /backup/nextcloud-config.tgz -C /config .
docker exec -it nextcloud occ maintenance:mode --offBeachten Sie, was in der Dump-Zeile fehlt: ein -t-Flag. Ein TTY schreibt Zeilenenden um. Ein SQL-Dump, der ein TTY durchlaufen hat, ist beschädigt. Das bemerken Sie oft erst bei der Wiederherstellung. Beachten Sie außerdem, dass ein Passwort in der Befehlszeile in der Ausgabe von ps sichtbar ist, solange der Befehl ausgeführt wird. Lesen Sie es daher aus Ihrer .env-Datei in die Shell ein, statt es einzugeben. Ältere Datenbank-Images enthalten mysqldump statt mariadb-dump. Das Handbuch dokumentiert beide Varianten.
Laden Sie den Dump zur Wiederherstellung in eine leere Datenbank. Entpacken Sie beide Archive in neue Volumes. Starten Sie anschließend die Container und deaktivieren Sie danach den Wartungsmodus. Wenn die Verzeichnisse und der Dump aus unterschiedlichen Zeitpunkten stammen, stimmen Dateicache und Datenbank nicht überein. occ files:scan --all kann dann nur eine Richtung reparieren. Es findet Dateien, für die eine Datei vorhanden ist, aber keine entsprechende Zeile existiert. Eine Datei, auf die eine Zeile verweist, kann es nicht zurückbringen.
Bewahren Sie das Ergebnis außerhalb des Servers auf. Eine Kopie auf derselben VPS geht mit der VPS verloren. Deshalb gehört restic in ein Repository außerhalb des Servers zu diesem Ablauf. Ebenso ist ein Provider-Snapshot ein anderes Werkzeug als ein Backup. Wenn Sie den Stack noch einrichten, beschreibt eine vollständige Nextcloud-Installation auf einer VPS den Reverse Proxy und das TLS-Zertifikat (Transport Layer Security), die in diesem Leitfaden nicht behandelt werden.
FAQ
Wo befindet sich das Nextcloud-Datenverzeichnis in einem Docker-Container?
Beim Image von linuxserver.io befindet es sich unter /data im Container. Die Installation mit config.php liegt unter /config. Das sind Pfade innerhalb des Containers. Den Host-Pfad ermitteln Sie mit docker inspect nextcloud, indem Sie den Wert Source im Abschnitt Mounts ablesen. Alternativ führen Sie docker volume inspect auf dem Volume aus und lesen Mountpoint ab. Andere Nextcloud-Images verwenden andere Pfade im Container. Prüfen Sie daher die Dokumentation für den von Ihnen festgelegten Tag und bestätigen Sie den Pfad mit docker exec -it nextcloud occ config:system:get datadirectory.
Warum werden Dateien, die ich in das Volume kopiere, in Nextcloud nicht angezeigt?
Nextcloud liest die Dateiliste aus dem Datei-Cache in der Datenbank, statt das Verzeichnis direkt einzulesen. Eine Datei, die nicht über Nextcloud hinzugefügt wurde, hat deshalb keinen Datenbankeintrag und bleibt unsichtbar. Führen Sie docker exec -it nextcloud occ files:scan --path="/alice/files/Photos" für einen Ordner oder occ files:scan --all für alle Benutzer aus. Wenn die Dateien angezeigt werden, sich aber nicht verschieben oder löschen lassen, liegt die Ursache an den Eigentumsrechten: Der Benutzer im Container muss Schreibzugriff auf die Dateien haben.
Reicht eine Kopie des Daten-Volumes aus, um Nextcloud wiederherzustellen?
Nein. Das Daten-Volume enthält den Dateiinhalt. Die Datenbank enthält den Dateiindex sowie Benutzer und Freigaben. config.php enthält die Datenbankzugangsdaten und die Instanz-ID. Für eine funktionierende Wiederherstellung benötigen Sie den Datenordner, den Konfigurationsordner, die Datenbank sowie die Ordner für benutzerdefinierte Apps und Themes, sofern Sie diese verwenden. Sichern Sie alle Bestandteile zum gleichen Zeitpunkt. Wenn die Datenbank neuer als die Dateien ist, verweist sie auf Dateien, die nicht vorhanden sind.
Warum ist mein Daten-Volume deutlich größer als die Dateien, die meine Benutzer sehen?
Vorschaubilder, gelöschte Dateien und alte Versionen befinden sich im selben Volume. Sie erscheinen nicht in der Anzeige, die ein Benutzer sieht. Messen Sie den Speicherbedarf mit docker exec -it nextcloud sh -c 'du -sh /data/*'. Der Papierkorb bewahrt gelöschte Dateien standardmäßig 30 Tage lang auf und leert ihn nur früher, wenn Speicherplatz benötigt wird. Die App Versions kann bis zur Hälfte des aktuell verfügbaren freien Speicherplatzes eines Benutzers belegen. Leeren Sie diese Daten mit occ trashbin:cleanup --all-users, occ versions:cleanup alice und occ preview:cleanup. Rechnen Sie damit, dass die Vorschaubilder wieder größer werden, sobald Benutzer ihre Dateien öffnen.
Kann ich das Nextcloud-Datenverzeichnis auf eine andere Festplatte verschieben?
Binden Sie den neuen Speicherort unter demselben Pfad im Container ein, statt den bei Nextcloud bekannten Pfad zu ändern. Stoppen Sie den Container und kopieren Sie den bisherigen Inhalt mit erhaltenen Eigentumsrechten auf die neue Festplatte (cp -a oder rsync -aAX). Verweisen Sie anschließend in Ihrer Compose-Datei mit dem Volume oder Bind-Mount auf den neuen Speicherort. Starten Sie den Container danach wieder. Nextcloud sieht weiterhin /data. Deshalb muss kein Datenbankeintrag geändert werden. Prüfen Sie die Konfiguration mit docker exec -it nextcloud occ config:system:get datadirectory und führen Sie einen Test-Upload durch.