Update Nextcloud unter Proxmox und Docker schlägt versionsunabhängig immer fehl

Nextcloud läuft lokal mittels Docker in einem LXC Container auf einem Proxmox-Server (V. 8.1.4 auf x86 64-Bit). Zur Installation verwende ich ein docker compose script (yml). Als Datenbank verwende ich MariaDB (der Fehler tritt sowohl mit Version 10.6 als auch 10.11 auf). Nextcloud läuft und man kann sowohl intern als auch extern zugreifen.

Unabhängig von der Nextcloud-Version (begonnen bei 27.x, zuletzt bei 28.0.1) schlägt ein Update immer fehl: Beim Zugriff auf Nextcloud erhalte ich als Fehlermeldung: “Internal Server Error”. In Portainer werden sowohl Nextcloud als auch die Datenbank als healthy angezeigt.

Was mache ich hier falsch?

Meine Vorgehensweise:

  1. docker compose pull nextcloud zum Laden der neuen Verseion (z.B. 28.0.2 zum Update von 28.0.1 – keine Versionssprünge o.ä.)
  2. docker compose up -d nextcloud zum Neustart des docker-Containers

Beim Versuch 28.0.1 auf 28.0.2 upzudaten erhalte ich folgende Log-Meldungen:
root@docker:~/nextcloud# docker compose logs -f nextcloud
nextcloud | Configuring Redis as session handler
nextcloud | Initializing nextcloud 28.0.2.5 …
nextcloud | Upgrading nextcloud from 28.0.1.1 …
nextcloud | cannot delete non-empty directory: db
nextcloud | => Searching for scripts (*.sh) to run, located in the folder: /docker-entrypoint-hooks.d/pre-upgrade
nextcloud | An unhandled exception has been thrown:
nextcloud | PDOException: SQLSTATE[42S02]: Base table or view not found: 1146 Table ‘nextcloud.oc_appconfig’ doesn’t exist in /var/www/html/3rdparty/doctrine/dbal/src/Driver/PDO/Connection.php:71
nextcloud | Stack trace:
nextcloud | #0 /var/www/html/3rdparty/doctrine/dbal/src/Driver/PDO/Connection.php(71): PDO->query(‘SELECT * FROM ...') nextcloud | #1 /var/www/html/3rdparty/doctrine/dbal/src/Connection.php(1100): Doctrine\DBAL\Driver\PDO\Connection->query('SELECT * FROM …’)
nextcloud | #2 /var/www/html/lib/private/DB/Connection.php(261): Doctrine\DBAL\Connection->executeQuery(‘SELECT * FROM ...', Array, Array, NULL) nextcloud | #3 /var/www/html/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(337): OC\DB\Connection->executeQuery('SELECT * FROM …’, Array, Array, NULL)
nextcloud | #4 /var/www/html/3rdparty/doctrine/dbal/src/Query/QueryBuilder.php(377): Doctrine\DBAL\Query\QueryBuilder->executeQuery()
nextcloud | #5 /var/www/html/lib/private/DB/QueryBuilder/QueryBuilder.php(280): Doctrine\DBAL\Query\QueryBuilder->execute()
nextcloud | #6 /var/www/html/lib/private/AppConfig.php(421): OC\DB\QueryBuilder\QueryBuilder->execute()
nextcloud | #7 /var/www/html/lib/private/AppConfig.php(187): OC\AppConfig->loadConfigValues()
nextcloud | #8 /var/www/html/lib/private/AppConfig.php(377): OC\AppConfig->getApps()
nextcloud | #9 /var/www/html/lib/private/App/AppManager.php(128): OC\AppConfig->getValues(false, ‘enabled’)
nextcloud | #10 /var/www/html/lib/private/App/AppManager.php(149): OC\App\AppManager->getInstalledAppsValues()
nextcloud | #11 /var/www/html/lib/private/legacy/OC_App.php(231): OC\App\AppManager->getInstalledApps()
nextcloud | #12 /var/www/html/lib/private/AppFramework/Bootstrap/Coordinator.php(90): OC_App::getEnabledApps()
nextcloud | #13 /var/www/html/lib/base.php(700): OC\AppFramework\Bootstrap\Coordinator->runInitialRegistration()
nextcloud | #14 /var/www/html/lib/base.php(1200): OC::init()
nextcloud | #15 /var/www/html/console.php(48): require_once(‘/var/www/html/l…’)
nextcloud | #16 /var/www/html/occ(11): require_once(‘/var/www/html/c…’)
nextcloud | #17 {main}

daein Vorgehen ist grundsätzlich richtig - so funktioniert es bei mir seit ca 10 Versionen weitgehend problemlos. Ich finde folgendes Log komisch

hast du evtl das Volume der Datenbank im Nextcloud App Container gemappt? das wäre nicht sinnvoll.

Bitte poste deine compose Datei… und bitte verwende kein Portainer für Nextcloud!

Danke für die schnelle Antwort.
Portainer läuft in einem eigenen Container und nutze ich hier nur zur Anzeige der laufenden Container und ggf. um überflüssie Images zu löschen. Der NC-Container wird außerhalb von Portainer erstellt und gestartet. Das Log-File habe ich mittels docker compose logs -f nextcloud erstellt.
In der Tat wurde das Datenbank-Volume mit inn der App im Container gemappt. Das habe ich korrigiert. Allerdings bleibt der Fehler. Hier das Protokoll des Update-Versuchs:
Log_Nextcloud_update.pdf (75,6 KB)
(BTW: Gibt es eine elegantere Methode zum Hochladen als ein pdf zu erzeugen?)
Der Prozess meldet zum Schluss mit nextcloud exited with code 0. Trotzdem kann ich Nextcloud nicht aufrufen: The requested URL was not found on this server. (In Portainer werden alle Container als healthy angezeigt.)

Und hier noch mein compose file (auch als pdf):
docker-compose.yml.pdf (252,5 KB)

zumindest kurze snippets wie die .yml Date kannst du elegant als “code block” einfügen - im Text mit “backticks” markieren oder oben mit dem </> Button

volumes:
- ./cloud/nextcloud:/var/www/html
- ./cloud/nextcloud/data:/var/www/html/data
- ./cloud/nextcloud/apps:/var/www/html/apps
- ./cloud/nextcloud/config:/var/www/html/config

die erste Zeile ist redundant… aber vermutlich ist es nicht das Problem. es bleibt wie du schon vorher gezeigt hast beim Fehler.

nextcloud | Next Doctrine\DBAL\Exception\TableNotFoundException: An
exception occurred while executing a query: SQLSTATE[42S02]: Base table
or view not found: 1146 Table 'nextcloud.oc_appconfig' doesn't exist in
/var/www/html/3rdparty/doctrine/dbal/src/Driver/API/MySQL/ExceptionConver
ter.php:49

ich schätze es stimmt etwas mit der Datenbank nicht… ich sehe den Fehler aber nicht auf den ersten Blick.

Deine Config ist recht umfangreich, es ist schwer diese schnell zu verstehen - wenn ich das richtig verstehe ist das eine frische Installation - ich würde mit einer stark reduzierten Konfiguration starten Docker .examples und nochmal testen - und dann schrittweise erweitern.

Dank Docker kannst du mit einer “alten Version” starten und dann die Upgrades durchtesten - oder immer wieder einen speziellen Schritt - auch parallel zur bestehenden Installation…

ich sehe auch dass du bei allen Containern .env File verwendest und gleichzeitig viele env Variablen direkt angibst - das ist nicht falsch aber mE schwer zuverstehen… ich würde nur eine Methode gleichzeitig nutzen… man kann auch ein .env File pro Container erstellen - mit relevanten Daten…