Nextcloud 35: Was neu ist und so steigen Sie mit Docker von 34 um
Nextcloud 35 setzt MariaDB ab 10.11 und PHP ab 8.3 voraus. Diese Anleitung führt mit dem offiziellen Docker-Image von 34.0.5 auf 35.0.2: Sicherung, MariaDB 10.6 auf 11.8, Upgrade, Nacharbeiten mit occ und ein getesteter Rückweg.
Geprüft am 22.10.2026 · für Nextcloud 35.0.2
Mit KI erstellt – redaktionelle Prüfung ausstehend
WerbelinksMit * markierte Links sind Werbelinks: Bei einem Kauf erhalten wir eine Provision, der Preis bleibt gleich. Als Amazon-Partner verdiene ich an qualifizierten Verkäufen. Mehr dazu

Nextcloud 35 (Markenname Nextcloud Hub 26 Summer) ist seit dem 15. September 2026 stabil, aktuell ist Version 35.0.2 vom 15. Oktober 2026. Der Schritt von 34 auf 35 ist mehr als ein Image-Tausch: Nextcloud 35 unterstützt MariaDB 10.6 und MySQL 8.0 nicht mehr und streicht PHP 8.2. Wer Nextcloud mit dem offiziellen Docker-Image und einer älteren MariaDB betreibt, hebt deshalb zuerst die Datenbank an und dann Nextcloud. Diese Anleitung zeigt den kompletten Weg von Nextcloud 34.0.5 mit MariaDB 10.6 auf Nextcloud 35.0.2 mit MariaDB 11.8, mit Sicherung vorher, Nacharbeiten und einem getesteten Rückweg. Im Test mit einer kleinen Instanz dauerte das eigentliche Upgrade 34 Sekunden.
Voraussetzungen
- Eine laufende Nextcloud 34 mit dem offiziellen Image
nextcloud(Apache-Variante), MariaDB und Redis unter Docker Compose. Läuft bei Ihnen noch 33, steigen Sie zuerst auf 34.0.5 und dann mit dieser Anleitung weiter. Die Grundinstallation von Docker zeigt die Anleitung Docker Compose unter Linux, getestet wurde mit Docker 29.8.2 und Compose v5.5.1 unter Debian 12. - Ein Server mit mindestens 2 CPU-Kernen und 4 GB RAM, x86-64 oder ARM64. Alle drei Images gibt es für beide Architekturen, getestet wurde x86-64.
- Freier Speicher für die Sicherung, mindestens so viel wie der Ordner
nextcloudplus Datenbank belegen, dazu Platz für die neuen Images von Nextcloud und MariaDB (im Test zusammen rund 2,6 GB). - Ein Wartungsfenster. Am längsten dauert bei großen Datenbeständen die Sicherung, weil sie den ganzen Datenordner erfasst.
- Zugriff per SSH mit
sudo-Rechten. Für Nextcloud All-in-One gilt ein anderer Weg, siehe Häufige Fragen.
| Eckdaten | vorher | nachher |
|---|---|---|
| Nextcloud-Image | nextcloud:34.0.5-apache | nextcloud:35.0.2-apache |
| Datenbank | mariadb:10.6.28 | mariadb:11.8.9 |
| PHP im Image | 8.5.12 | 8.5.12 |
| Cache | redis:8.10.2-alpine | unverändert |
| Port | 127.0.0.1:8080 hinter einem Reverse Proxy | unverändert |
Was sich mit Nextcloud 35 ändert
Für den Betrieb zählen vor allem die neuen Mindestanforderungen aus den Upgrade-Hinweisen: MariaDB ab 10.11 (unterstützt sind 10.11, 11.4, 11.8 und 12.3, hervorgehoben ist 11.8), MySQL ab 8.4, PHP 8.3 bis 8.5, bei nativen Installationen mindestens Debian 13 oder Ubuntu 24.04. Im offiziellen Docker-Image ist PHP kein Thema, die Images für 34 und 35 bringen laut Dockerfile beide PHP 8.5 mit. Die Datenbank liegt dagegen in Ihrem eigenen Container und bleibt auf dem Stand, den Sie einmal eingetragen haben.
Neu für Admins sind laut Changelog die occ-Befehle db:info, db:size, db:index-usage und db:locks, Einrichtungsprüfungen lassen sich nach Kategorie starten, und die App Office ist jetzt fester Bestandteil. Für Anwender nennt der Hersteller unter anderem die App Teams und Neuerungen in Talk, Tables und Text. Nextcloud All-in-One 14.4.1 enthält laut Release Notes 34.0.5, neue AIO-Instanzen können 35 direkt installieren.
Schritt 1: Bestand prüfen und compose.yaml abgleichen
Die Anleitung geht von einem Projektordner ~/nextcloud mit Bind-Mounts aus. So sieht die compose.yaml nach dem Umstieg aus, vorher stehen dort mariadb:10.6.28 und zweimal nextcloud:34.0.5-apache. Fehlt bei Ihnen MARIADB_AUTO_UPGRADE, ergänzen Sie die Zeile jetzt, ohne sie überspringt das MariaDB-Image die Aktualisierung der Systemtabellen.
x-nextcloud-env: &nextcloud-env
MYSQL_HOST: db
MYSQL_DATABASE: nextcloud
MYSQL_USER: nextcloud
MYSQL_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD fehlt in .env}
REDIS_HOST: redis
TRUSTED_PROXIES: 172.16.0.0/12
OVERWRITEPROTOCOL: https
OVERWRITECLIURL: https://${NC_DOMAIN:?NC_DOMAIN fehlt in .env}
services:
db:
image: mariadb:11.8.9
restart: unless-stopped
command: --transaction-isolation=READ-COMMITTED
environment:
MARIADB_ROOT_PASSWORD: ${DB_ROOT_PASSWORD:?DB_ROOT_PASSWORD fehlt in .env}
MARIADB_DATABASE: nextcloud
MARIADB_USER: nextcloud
MARIADB_PASSWORD: ${DB_PASSWORD:?DB_PASSWORD fehlt in .env}
MARIADB_AUTO_UPGRADE: "1"
volumes:
- ./db:/var/lib/mysql
healthcheck:
test: ["CMD", "healthcheck.sh", "--connect", "--innodb_initialized"]
interval: 10s
timeout: 5s
retries: 12
start_period: 30s
redis:
image: redis:8.10.2-alpine
restart: unless-stopped
app:
image: nextcloud:35.0.2-apache
restart: unless-stopped
depends_on:
db:
condition: service_healthy
redis:
condition: service_started
ports:
- "127.0.0.1:8080:80"
environment: *nextcloud-env
volumes:
- ./nextcloud:/var/www/html
cron:
image: nextcloud:35.0.2-apache
restart: unless-stopped
entrypoint: /cron.sh
depends_on:
- app
environment: *nextcloud-env
volumes:
- ./nextcloud:/var/www/html
Der Anker &nextcloud-env gibt dem Cron-Container dieselben Variablen wie der App, sonst arbeitet er ohne Redis-Sperren. In der .env stehen NC_DOMAIN, DB_ROOT_PASSWORD und DB_PASSWORD. TRUSTED_PROXIES deckt das Docker-Standardnetz ab, passen Sie den Bereich an Ihren Reverse Proxy an. Prüfen Sie dann den Bestand und spielen Sie offene App-Updates ein, solange Sie noch auf 34 sind:
cd ~/nextcloud
docker compose exec -u www-data app php occ status
docker compose exec db sh -c 'mariadb -N -u root -p"$MARIADB_ROOT_PASSWORD" -e "SELECT VERSION();"'
docker compose exec -u www-data app php occ app:update --all
docker compose exec -u www-data app php occ app:list --shipped=false
docker compose exec -u www-data app php occ setupchecks
Ausgabe von occ status im Test:
- installed: true
- version: 34.0.5.1
- versionstring: 34.0.5
- edition:
- maintenance: false
- needsDbUpgrade: false
- productname: Nextcloud
- extendedSupport: false
app:list --shipped=false zeigt nachinstallierte Apps. Prüfen Sie im App-Store, ob jede davon Nextcloud 35 unterstützt.
Verifizieren: occ status meldet versionstring: 34.0.5, maintenance: false und needsDbUpgrade: false, die Datenbank meldet 10.6.28-MariaDB-ubu2204.
Schritt 2: Backup vor dem Umstieg
Gesichert werden die Datenbank als SQL-Dump und der komplette Ordner nextcloud mit Konfiguration, Apps und Nutzerdaten. Der Wartungsmodus verhindert Änderungen zwischen beiden Teilen. -T schaltet das Pseudo-Terminal ab, sonst landen Steuerzeichen im Dump.
cd ~/nextcloud
mkdir -p backup/vor-nc35
docker compose exec -u www-data app php occ maintenance:mode --on
docker compose exec -T db sh -c 'mariadb-dump --single-transaction --default-character-set=utf8mb4 -u root -p"$MARIADB_ROOT_PASSWORD" nextcloud' > backup/vor-nc35/nextcloud-db.sql
sudo tar -czf backup/vor-nc35/nextcloud-html.tar.gz nextcloud
docker compose exec -u www-data app php occ maintenance:mode --off
Kopieren Sie den Ordner backup zusätzlich auf ein anderes System, etwa mit restic.
Verifizieren: Der Dump endet mit -- Dump completed und enthielt im Test 131 Tabellen, tar -tzf backup/vor-nc35/nextcloud-html.tar.gz | grep config/config.php findet die Konfiguration.
Schritt 3: MariaDB 10.6 auf 11.8 anheben
MariaDB 11.8 steht in den Systemanforderungen von Nextcloud 34 und 35. Deshalb kommt die Datenbank zuerst dran, und Sie prüfen den Zwischenstand mit der vertrauten Version. Das Image sichert vor dem Sprung die Systemdatenbank in den Datenordner und ruft mariadb-upgrade auf. --wait lässt Compose warten, bis der Healthcheck healthy meldet. Die sed-Befehle hier und in Schritt 4 setzen die Tags aus der compose.yaml oben voraus. Steht bei Ihnen ein anderer Tag, etwa mariadb:10.6, ändern Sie die image-Zeilen von Hand.
sed -i 's#mariadb:10.6.28#mariadb:11.8.9#' compose.yaml
docker compose pull db
docker compose up -d --wait db
docker compose logs --no-log-prefix db | grep -iE 'upgrade|Backing up'
docker compose up -d
Ausgabe im Test, ohne Zeitstempel und Thread-Nummer am Zeilenanfang:
[Note] [Entrypoint]: MariaDB upgrade information missing, assuming required
[Note] InnoDB: Upgraded the change buffer: 0 tablespaces, 0 pages
[Note] [Entrypoint]: Backing up system database to system_mysql_backup_unknown_version.sql.zst
[Note] [Entrypoint]: Backing up complete
[Note] [Entrypoint]: Starting mariadb-upgrade
The --upgrade-system-tables option was used, user tables won't be touched.
[Note] [Entrypoint]: Finished mariadb-upgrade
Verifizieren: docker compose ps zeigt db als healthy, SELECT VERSION(); liefert 11.8.9-MariaDB-ubu2404, und occ status meldet weiterhin 34.0.5 ohne Wartungsmodus.
Schritt 4: Nextcloud 34 auf 35 aktualisieren
Das offizielle Image vergleicht beim Start die Version im Ordner nextcloud mit der eigenen, kopiert den neuen Code hinein und ruft occ upgrade auf. Tauschen Sie dafür beide Image-Zeilen, App und Cron:
sed -i 's#nextcloud:34.0.5-apache#nextcloud:35.0.2-apache#g' compose.yaml
docker compose pull
docker compose up -d
docker compose logs -f app
Warten Sie, bis Initializing finished erscheint, und beenden Sie die Anzeige mit Strg+C. Die wichtigsten Zeilen aus dem Test:
Initializing nextcloud 35.0.2.2 ...
Upgrading nextcloud from 34.0.5.1 ...
Updated database
Starting code integrity check...
Update successful
Initializing finished
Steht im Log The following apps have been disabled:, hat das Upgrade laut Startskript des Images inkompatible Apps abgeschaltet. Aktivieren Sie sie erst wieder, wenn der Anbieter eine Version für 35 liefert.

Verifizieren: docker compose exec -u www-data app php occ status zeigt:
- installed: true
- version: 35.0.2.2
- versionstring: 35.0.2
- edition:
- maintenance: false
- needsDbUpgrade: false
- productname: Nextcloud
- extendedSupport: false
Schritt 5: Nacharbeiten nach dem Upgrade
Die drei db:add-missing-Befehle legen fehlende Indizes, Spalten und Primärschlüssel an, die Einrichtungsprüfung meldet solche Lücken sonst als Warnung. Die Reparatur mit --include-expensive führt zusätzlich die aufwendigen Reparaturschritte aus, im Test mit kleiner Instanz dauerte sie eine Sekunde.
docker compose exec -u www-data app php occ db:add-missing-indices
docker compose exec -u www-data app php occ db:add-missing-columns
docker compose exec -u www-data app php occ db:add-missing-primary-keys
docker compose exec -u www-data app php occ maintenance:repair --include-expensive
docker compose exec -u www-data app php occ app:update --all
docker compose exec -u www-data app php occ setupchecks
Der neue Befehl occ db:info lieferte im Test:
+-------------------------+------------------------+----------------+--------+
| Setting | Value | Recommended | Status |
+-------------------------+------------------------+----------------+--------+
| Engine | MySQL/MariaDB | — | |
| Version | 11.8.9-MariaDB-ubu2404 | — | |
| Character Set | utf8mb4 | utf8mb4 | OK |
| Max Connections | 151 | ≥ 150 | OK |
| InnoDB Buffer Pool (GB) | 0.13 | ≥ 1 GB | CHECK |
| Transaction Isolation | READ-COMMITTED | READ-COMMITTED | OK |
+-------------------------+------------------------+----------------+--------+

Verifizieren: occ setupchecks meldet keine fehlenden Spalten, Indizes oder Primärschlüssel, PHP-Version und Datenbankversion stehen auf grün. Neu in 35 prüft Nextcloud auch die Datenbankkonfiguration. Die Warnung dazu im Test kam vom InnoDB Buffer Pool (siehe Troubleshooting). Unter Verwaltung, Grundeinstellungen steht bei Hintergrundaufgaben Cron mit einem aktuellen Zeitpunkt der letzten Ausführung.

Schritt 6: Rückweg auf Nextcloud 34
Ein Downgrade des Codes gibt es bei Nextcloud nicht, der Container verweigert das alte Image (siehe Troubleshooting). Der Rückweg ist deshalb die Sicherung aus Schritt 2. MariaDB 11.8 dürfen Sie behalten, Nextcloud 34 läuft darauf. Achtung: Der Befehl rm -rf löscht den aktuellen Stand endgültig, alles nach der Sicherung ist danach weg.
cd ~/nextcloud
docker compose down
sudo rm -rf nextcloud db
sudo tar -xzf backup/vor-nc35/nextcloud-html.tar.gz
sed -i 's#nextcloud:35.0.2-apache#nextcloud:34.0.5-apache#g' compose.yaml
docker compose up -d --wait db
docker compose exec -T db sh -c 'mariadb -u root -p"$MARIADB_ROOT_PASSWORD" nextcloud' < backup/vor-nc35/nextcloud-db.sql
docker compose up -d
docker compose exec -u www-data app php occ maintenance:mode --off
docker compose exec -u www-data app php occ maintenance:data-fingerprint
Der Wartungsmodus ist nach dem Entpacken aktiv, weil die Sicherung in diesem Zustand entstand. Nach maintenance:data-fingerprint laden Sync-Clients laut Nextcloud-Dokumentation fehlende Dateien wieder hoch und fragen bei Abweichungen nach.
Verifizieren: occ status meldet wieder 34.0.5, Dateien, Benutzer und Freigabelinks von vor der Sicherung sind da. Im Test war die Markerdatei wieder lesbar, beide Konten waren vorhanden, die zweite Benutzerin meldete sich per WebDAV an (HTTP 207), und der Freigabelink stand wieder in der Liste.
Schritt 7: Sicherung und Wiederherstellung im neuen Stand
Sichern Sie nach dem Umstieg mit denselben Befehlen wie in Schritt 2 in einen neuen Ordner backup/nc35. Die Sicherung von vor dem Umstieg enthält nur den Stand von 34, alles danach fehlt darin. Die Wiederherstellung nach einem Totalverlust läuft wie der Rückweg, nur bleibt das Image auf 35.0.2-apache. Auch hier löscht rm -rf den aktuellen Stand endgültig:
cd ~/nextcloud
docker compose down
sudo rm -rf nextcloud db
sudo tar -xzf backup/nc35/nextcloud-html.tar.gz
docker compose up -d --wait db
docker compose exec -T db sh -c 'mariadb -u root -p"$MARIADB_ROOT_PASSWORD" nextcloud' < backup/nc35/nextcloud-db.sql
docker compose up -d
docker compose exec -u www-data app php occ maintenance:mode --off
docker compose exec -u www-data app php occ maintenance:data-fingerprint
Verifizieren: occ status meldet 35.0.2 mit maintenance: false und needsDbUpgrade: false. Im Test waren nach dem Totalverlust und dem Restore die Markerdatei, beide Konten und der Freigabelink wieder da, ein falsches Passwort lieferte weiterhin HTTP 401.

Troubleshooting
| Symptom | Ursache und Lösung |
|---|---|
App-Container startet nicht, Log: Can't start Nextcloud because the version of the data (35.0.2.2) is higher than the docker image version (34.0.5.1) and downgrading is not supported. Are you sure you have pulled the newest image version? | Das alte Image soll auf Daten der neuen Version laufen. Wieder 35.0.2-apache eintragen oder den Rückweg aus Schritt 6 gehen. |
Log: Can't start Nextcloud because upgrading from 33.0.10.1 to 35.0.2.2 is not supported. | Sprung über eine Hauptversion. Erst nextcloud:34.0.5-apache starten, Upgrade abwarten, dann 35. |
Log: MariaDB upgrade (mariadb-upgrade or creating healthcheck users) required, but skipped due to $MARIADB_AUTO_UPGRADE setting | Variable fehlt. MARIADB_AUTO_UPGRADE: "1" ergänzen und docker compose up -d db erneut ausführen. |
Einrichtungsprüfung meldet Datenbankkonfiguration: 1 Datenbanküberprüfung ist fehlgeschlagen | occ db:info zeigt die Zeile mit CHECK. Im Test war es der InnoDB Buffer Pool unter 1 GB. Den Wert legt innodb_buffer_pool_size fest. |
| Nach dem Restore erscheint nur die Wartungsseite | Die Sicherung entstand im Wartungsmodus. occ maintenance:mode --off ausführen. |
| WebDAV-Zugriff wird abgelehnt | Falsches Passwort oder App-Passwort. Im Test antwortete der Server mit falschem Passwort mit HTTP 401. |
Häufige Fragen
Kann ich von Nextcloud 33 direkt auf 35 springen?
Nein. Das Image erlaubt nur eine Hauptversion pro Schritt und bricht mit einer Meldung ab, bevor es Dateien kopiert. Starten Sie zuerst nextcloud:34.0.5-apache, warten Sie auf Initializing finished und aktualisieren Sie dann auf 35.
Muss MariaDB wirklich vor Nextcloud aktualisiert werden?
Nextcloud 35 führt MariaDB 10.6 nicht mehr als unterstützt. Nextcloud 34 lief im Test auf MariaDB 11.8 ohne Auffälligkeiten, Dateien und Anmeldung funktionierten vor dem Upgrade auf 35. Datenbank zuerst heißt: Sie prüfen jeden Schritt einzeln und wissen bei einem Fehler, welcher es war.
Kann ich gleich MariaDB 12.3 nehmen?
Nextcloud 35 unterstützt 12.3, Nextcloud 34 führt sie nicht. Hervorgehoben ist in den Systemanforderungen beider Versionen 11.8. Bleiben Sie für den Umstieg deshalb bei 11.8 und wechseln Sie erst danach, falls gewünscht. Der Tag mariadb:lts zeigt inzwischen auf 12.3, ein fester Tag verhindert ungeplante Sprünge.
Wie steige ich mit Nextcloud All-in-One um?
Gar nicht von Hand. AIO verwaltet Datenbank und Images selbst und übernimmt laut Update-Richtlinie eine neue Hauptversion frühestens nach dem ersten Patch-Release, wenn wichtige Apps kompatibel sind. AIO 14.4.1 enthält laut Release Notes noch 34.0.5. Die Einrichtung zeigt Nextcloud mit Docker einrichten (All-in-One).
Fazit
Der Umstieg auf Nextcloud 35 ist mit dem offiziellen Image ein Tag-Tausch, wenn die Datenbank vorher passt. Die eigentliche Arbeit steckt in der Vorbereitung: MariaDB 10.6 auf 11.8, offene App-Updates, eine Sicherung im Wartungsmodus. Weil es kein Downgrade gibt, ist diese Sicherung der einzige Rückweg, im Test brachte sie Dateien, Konten und Freigabe von 34 zurück. Wer Nextcloud ohne Docker betreibt, findet den Weg in der Anleitung Nextcloud nativ auf Ubuntu.
Weiterführende Anleitungen und Quellen
- Docker Compose unter Linux: Grundlage für Selfhosting
- Docker Compose absichern: Secrets, Healthchecks, Non-Root
- Nextcloud mit Docker einrichten (All-in-One)
- Collabora Online mit Docker an Nextcloud anbinden
- Nextcloud: Upgrade to Nextcloud 35
- Nextcloud 35: Systemanforderungen
- Release Nextcloud 35.0.2
- Nextcloud Hub 26 Summer: Neuerungen laut Hersteller
- Offizielles Docker-Image: Repository und Update-Hinweise
- Nextcloud 35: Wiederherstellung und data-fingerprint
- Nextcloud AIO: Update-Richtlinie
- Image nextcloud auf Docker Hub
- Image mariadb auf Docker Hub
- Release Notes Nextcloud AIO 14.4.1


