我正在使用 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
允许您手动更新并禁用维护模式。