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
謝謝!
我能夠通過手動更改卷
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 就好了。
PS:
docker-compose exec --user www-data app php occ
允許您手動更新和禁用維護模式。