Docker

跳過主要版本後如何修復 Nextcloud docker 容器?

  • April 23, 2022

我正在使用 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

謝謝!

我能夠通過手動更改卷version.php文件中的版本來解決問題nextcloud

這可能會導致無法修復的問題,如果您想這樣做,請備份您的數據!

該文件的完整路徑是:/var/lib/docker/volumes/nextcloud_nextcloud/_data/version.php

我最初設置 nextcloud 時創建了一個舊的 nextcloud 卷。我只是使用了version.php該卷中的版本,因為我非常有信心它具有正確的版本。

以下是變化:

“不正確” version.php

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

“正確” version.php

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

更改後,我可以先在版本 21 中啟動 nextcloud,以檢查一切是否仍然存在。接下來,我能夠開始並逐步更新到 22 和 23 就好了。

PS:

docker-compose exec --user www-data app php occ允許您手動更新和禁用維護模式。

引用自:https://serverfault.com/questions/1099160