如何在跳過主要版本後修復 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允許您手動更新和停用維護模式。

相關內容