Wie repariert man einen Nextcloud-Docker-Container, nachdem eine Hauptversion übersprungen wurde?

Wie repariert man einen Nextcloud-Docker-Container, nachdem eine Hauptversion übersprungen wurde?

Ich betreibe meine private Nextcloud-Instanz mit Docker (Docker-Compose). Ich habe versucht, auf eine neuere Nextcloud-Version zu aktualisieren, habe aber nicht bemerkt, dass ich keine Hauptversion (von 21 auf 23) überspringen sollte. Jetzt kann ich es überhaupt nicht starten:

  • Wenn ich versuche, den Container mit der Version 23 zu starten und das Upgrade auszulösen, schlägt dies fehl, da kein Upgrade von 21 möglich ist:
    leifb@***:~/nextcloud$ sudo docker-compose exec --user www-data app php occ upgrade
    Nextcloud or one of the apps require upgrade - only a limited number of commands are available
    [...]
    Exception: Updates between multiple major versions and downgrades are unsupported.
    Update failed
    [...]
    
  • Wenn ich versuche, den Container mit einer Version <23 zu starten, schlägt dies fehl, weil er denkt, die Daten seien von Version 23:
    app_1  | Can't start Nextcloud because the version of the data (23.0.3.2) is higher than the docker image version (22.2.6.2) and downgrading is not supported. Are you sure you have pulled the newest image version?
    

Gibt es eine Möglichkeit, ein Upgrade zu erzwingen oder mit Version 22 zu beginnen?

Hier ist meine Docker-Compose-Datei:

version: '2'

volumes:
  nextcloud:
  db:

services:
  db:
    image: mariadb
    restart: always
    command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
    volumes:
      - db:/var/lib/mysql
    environment:
      - MYSQL_ROOT_PASSWORD=***
      - MYSQL_PASSWORD=***
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud

  app:
    image: nextcloud:22
    restart: always
    ports:
      - 9009:80
    links:
      - db
    volumes:
      - nextcloud:/var/www/html
    environment:
      - MYSQL_PASSWORD=***
      - MYSQL_DATABASE=nextcloud
      - MYSQL_USER=nextcloud
      - MYSQL_HOST=db
      - OVERWRITEHOST=***
      - OVERWRITEPROTOCOL=https

Danke schön!

Antwort1

Ich konnte das Problem beheben, indem ich die Version in der version.phpDatei des nextcloudDatenträgers manuell geändert habe.

Dies kann zu irreparablen Problemen führen. Sichern Sie Ihre Daten, wenn Sie dasselbe tun möchten!

Der vollständige Pfad für diese Datei war:/var/lib/docker/volumes/nextcloud_nextcloud/_data/version.php

Ich hatte noch ein altes Nextcloud-Volume herumliegen, das ich bei der ersten Einrichtung von Nextcloud erstellt hatte. Ich habe einfach das version.phpvon diesem Volume verwendet, da ich ziemlich sicher war, dass es die richtige Version hatte.

Folgendes hat sich geändert:

"falsch" version.php:

<?php 
$OC_Version = array(23,0,3,2);
$OC_VersionString = '23.0.3';
$OC_Edition = '';
$OC_Channel = 'stable';
$OC_VersionCanBeUpgradedFrom = array (
  'nextcloud' => 
  array (
    '22.2' => true,
    '23.0' => true,
  ),
  'owncloud' => 
  array (
    '10.5' => true,
  ),
);
$OC_Build = '2022-03-21T13:05:48+00:00 5f6449283b5eb3cd0c96f475ff6f68a6c73a8140';
$vendor = 'nextcloud';

"richtig" version.php:

<?php 
$OC_Version = array(21,0,1,1);
$OC_VersionString = '21.0.1';
$OC_Edition = '';
$OC_Channel = 'stable';
$OC_VersionCanBeUpgradedFrom = array (
  'nextcloud' => 
  array (
    '20.0' => true,
    '21.0' => true,
  ),
  'owncloud' => 
  array (
    '10.5' => true,
  ),
);
$OC_Build = '2021-04-08T13:32:52+00:00 bd555dbe8568b2509bd7d82fabbe38d76c86afbe'
;
$vendor = 'nextcloud';

Nach dieser Änderung konnte ich Nextcloud zunächst in der Version 21 starten, um zu prüfen, ob noch alles da war. Anschließend konnte ich problemlos schrittweise auf 22 und 23 aktualisieren.

PS:

docker-compose exec --user www-data app php occErmöglicht Ihnen, den Wartungsmodus manuell zu aktualisieren und zu deaktivieren.

verwandte Informationen