跳过主要版本后如何修复 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

我手头有一个旧的 nextcloud 卷,是我最初设置 nextcloud 时创建的。我只是使用了version.php该卷中的版本,因为我非常确信它有正确的版本。

变化如下:

“不正确” 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允许您手动更新并禁用维护模式。

相关内容