两边的 Docker 版本尽量保持一致,我这边为19.03.15迁移镜像 制作包含修改数据的镜像文件 docker commit --author livejq --message "Create the chevereto image" chevereto chevereto:v0 导出制作好的镜像到当前目录 docker save -o chevereto chevereto:v0 传输到目标服务器后,加载该镜像到本地 docker load -i chevereto 迁移镜像中挂载的文件或目录 我这边挂载了“/media/pictures/uploads”和“/appdata/chevereto/php.ini”,前者保存上传的图片,后者用来自定义 PHP 启动参数。 这里以图片迁移到目标服务器为例 若还有其他外挂的目录或文件也按照这样迁移过去 ➜ ~ rsync -avPz -e 'ssh -p 2222' /media/pictures/uploads/* [email protected]:/media/ ...... ...... ...... 2022/03/30/9.th.jpg 14,504 100% 143.07kB/s 0:00:00 (xfr#1428, to-chk=0/1450) sent 122,669,965 bytes received 27,300 bytes 2,210,761.53 bytes/sec total size is 125,597,155 speedup is 1.02 迁移数据库 这边使用的是 MySQL,使用 mysqldump 命令导出为 SQL 文件。 mysqldump -uroot -p -B chevereto> /chevereto-backup.sql 加了-B会在导出的SQL文件中自动创建和使用数据库 SCP 传输完成后导入到目标服务器 MySQL mysql -uroot -p < /chevereto-backup.sql 接着需要创建用户并授权所有主机访问该数据库 mysql> grant all privileges on chevereto.* to "chevereto"@"%" identified by "123456" with grant option; Query OK, 0 rows affected (0.02 sec) mysql> flush privileges; 还原容器 这边由于需要访问宿主机的数据库,因此需要获取宿主机映射在容器下的IP地址。 ➜ ~ ip addr show docker0 3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default link/ether 02:42:0f:d8:d1:c7 brd ff:ff:ff:ff:ff:ff inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0 valid_lft forever preferred_lft forever 一切准备就绪后,接着开始用尝试创建容器。 下面的数据库信息需要结合自己的环境进行配置 docker run --privileged -d --name=chevereto --network=bridge --restart=always -p 5120:80 -e TZ=Asia/Shanghai -e CHEVERETO_DB_HOST=172.17.0.1 -e CHEVERETO_DB_USERNAME=chevereto -e CHEVERETO_DB_PASSWORD=123456 -e CHEVERETO_DB_NAME=chevereto -e CHEVERETO_DB_PREFIX=chv_ -v /opt/chevereto/php.ini:/usr/local/etc/php/php.ini -v /opt/chevereto/uploads:/var/www/html/images chevereto:v0 在网页尝试访问,检验迁移成果时,出现如下错误信息: Aw, snap! Internal Server Error [debug @ `error_log`] - https://v3-docs.chevereto.com/setup/debug.html 查看日志信息: docker logs -f chevereto | sed 's/\\n/\n/g' 其中的关键信息为: [client 172.17.0.1:52212] G\\DBException: SQLSTATE[HY000] [1045] Access denied for user 'root'@'172.17.0.2' (using password: YES) in /var/www/html/lib/G/classes/class.db.php:99\nStack trace:\n#0 /var/www/html/lib/G/classes/class.db.php(110): G\\DB->__construct()\n#1 这是因为我直接让 chevereto 使用 root 用户来登录 mysql,但 root 仅限于 localhost,所以导致权限不足无法登录成功。解决办法是创建独立用户并授权允许所有主机登录即可。这个已在前面补充创建用户过程,之后就能正常访问了。 这边省略了 Nginx 或 Apache 的相关 Web 服务配置,因与一般的配置无异,顾不再赘述。 来源 https://www.livejq.top/2022/how-to-migration-chevereto-by-docker
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。