之前用docker部署了一个版本的nextcloud,但是当时版本中存在一些bug,所以想升级一下。油管上有博主直接在nextcloud设置里更新的而且能用(这是地址,懂的都懂),但是我在nextcloud里升级管理器检测不到新的大版本更新而且点按钮更新小版本也无效,因此想按官网提供的方法升级大版本。为了数据安全,先找了个服务器做下测试,以防万一。这里简单记录一下全过程:
# yum install docker
先启动一个mysql容器
# docker pull mysql
# docker run --name db-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql
进容器里创建数据库
# docker exec -it db-mysql /bin/bash
在docker容器终端里
# mysql -u root -p
> create database nextcloud;
> exit
# exit
退出docker容器终端
为了测试版本升级,两个版本都下拉下来,先用19.0的nextcloud完成配置
# docker pull nextcloud:19.0-apache
# docker pull nextcloud:21.0-apache
创建一个路径给nextcloud里的数据存储目录挂载
# mkdir /data/nextcloud
# docker run --name nextcloud -d -p 80:80 --link db-mysql -v /data/nextcloud:/var/www/html/data nextcloud:19.0-apache
# docker ps
mysql和nextcloud都运行起来之后,在浏览器里配置完成nextcloud,数据库配置的时候,地址写mysql容器名和端口,即db-mysql:3306
配置完成之后可以测试一下能不能直接升级的不能的话,就要通过重新启动一个容器来升级了
先停掉前面的容器然后删除
# docker stop <nextcloud19.0容器id>
# docker rm <nextcloud19.0容器id>
# docker run --name nextcloud -d -p 80:80 --link db-mysql -v /data/nextcloud:/var/www/html/data nextcloud:21.0-apache
再进浏览器进行一些配置
官网说,一次只能升级一个大版本,也就是从19到21,要先升级到20,再从20到21,但是我直接从19升到21也没太大问题。装完之后,主要就在设置里,报了一些警告,比如数据库主键缺失,提示使用occ修复的,这个在油管也有(这里是链接)但是我实际执行occ命令的时候,首先是提示说要用www-data用户执行
# docker exec -it nextcloud /bin/bash
进到容器终端
root@ce4bd0671a90:/var/www/html# ./occ
Console has to be executed with the user that owns the file config/config.php
Current user id: 0
Owner id of config.php: 33
Try adding 'sudo -u #33' to the beginning of the command (without the single quotes)
If running with 'docker exec' try adding the option '-u 33' to the docker command (without the single quotes)
所以,解决办法是在容器外面执行命令并且指定用户
# docker exec -u 33 nextcloud /var/www/html/occ
这样执行命令时可以的,其他的方法比如在容器里切换到www-data用户再去执行,则可能报php的错。
Fatal error: Allowed memory size of xxx bytes exhausted (tried to allocate xxx bytes) in xxx.php on line xxx