メジャーバージョンをスキップした後、Nextcloud Docker コンテナを修正するにはどうすればよいですか?

メジャーバージョンをスキップした後、Nextcloud Docker コンテナを修正するにはどうすればよいですか?

私は docker (docker-compose) を使用してプライベート Nextcloud インスタンスを実行しています。新しい Nextcloud バージョンにアップグレードしようとしましたが、メジャー バージョン (21 から 23) をスキップしてはいけないことに気付きませんでした。現在、まったく起動できません。

  • バージョン 23 でコンテナを起動してアップグレードをトリガーしようとすると、21 からアップグレードできないため失敗します。
    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
    [...]
    
  • バージョン 23 未満のコンテナを起動しようとすると、データがバージョン 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?
    

強制的にアップグレードしたり、バージョン 22 から開始したりする方法はありますか?

これが私の docker-compose ファイルです:

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

ありがとう!

答え1

version.phpボリュームのファイルのバージョンを手動で変更することで問題を解決できましたnextcloud

これにより、修復不可能な問題が発生する可能性があります。同じことを行う場合は、データをバックアップしてください。

そのファイルの完全なパスは次のとおりです。/var/lib/docker/volumes/nextcloud_nextcloud/_data/version.php

version.php最初に nextcloud をセットアップしたときに作成した古い nextcloud ボリュームが残っていました。正しいバージョンであることが確信できたので、そのボリュームから使用しました。

変更された点は次のとおりです:

"正しくない" 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';

"正しい" 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';

変更後、まずバージョン 21 で nextcloud を起動して、すべてがまだ存在するかどうかを確認できました。次に、問題なくバージョン 22 と 23 を起動して段階的に更新することができました。

追伸:

docker-compose exec --user www-data app php occ手動で更新したり、メンテナンス モードを無効にしたりできます。

関連情報