OpenProject Community 13容器:旧Docker迁移新机器后数据恢复问题
OpenProject Community 13 Docker 迁移解决方案
问题根源
你之前直接用docker run启动容器但未挂载持久化数据卷,所有业务数据(数据库、上传文件等)都存储在容器的内部文件系统中,而非镜像里。仅迁移镜像只会得到干净的基础环境,自然无法恢复旧数据。
完整迁移步骤(推荐)
1. 旧机器导出容器数据
首先找到旧机器上运行的OpenProject容器ID:
docker ps -a | grep openproject/community:13
导出容器内的核心数据目录:
- 导出PostgreSQL数据库数据:
docker cp <旧容器ID>:/var/lib/postgresql/13/main ./openproject-db
- 导出OpenProject应用数据(含上传文件、配置等):
docker cp <旧容器ID>:/var/lib/openproject ./openproject-data
将导出的目录打包后传输到新机器:
tar -czf openproject-backup.tar.gz openproject-db openproject-data # 用scp传输到新机器,替换为你的新机器信息 scp openproject-backup.tar.gz your-user@new-machine-ip:/opt/
2. 新机器恢复数据并启动容器
在新机器上解压备份包:
cd /opt tar -xzf openproject-backup.tar.gz
创建持久化目录并设置正确权限(容器内对应用户UID分别为999(PostgreSQL)和33(www-data)):
sudo mkdir -p /opt/openproject/db /opt/openproject/data sudo cp -r openproject-db/* /opt/openproject/db/ sudo cp -r openproject-data/* /opt/openproject/data/ sudo chown -R 999:999 /opt/openproject/db sudo chown -R 33:33 /opt/openproject/data
使用挂载卷的方式启动容器(保留原环境变量):
docker run -d -p 8080:80 \ -e OPENPROJECT_SECRET_KEY_BASE=secret \ -e OPENPROJECT_HOST__NAME=localhost:8080 \ -e OPENPROJECT_HTTPS=false \ -e OPENPROJECT_DEFAULT__LANGUAGE=en \ -v /opt/openproject/db:/var/lib/postgresql/13/main \ -v /opt/openproject/data:/var/lib/openproject \ openproject/community:13
启动后访问localhost:8080即可看到旧数据已恢复。
备选方案:仅迁移数据库(SQL备份)
如果你只需要恢复数据库数据,可通过以下方式操作:
旧机器导出SQL备份
进入旧容器:
docker exec -it <旧容器ID> bash
导出OpenProject数据库(容器内默认用户为postgres,数据库名为openproject):
pg_dump -U postgres openproject > /tmp/openproject.sql
将SQL文件拷贝到宿主机:
docker cp <旧容器ID>:/tmp/openproject.sql ./
新机器导入SQL备份
先启动一个干净的OpenProject容器(使用原环境变量),等容器初始化完成后:
docker exec -i <新容器ID> psql -U postgres openproject < openproject.sql
注意:此方法仅恢复数据库数据,上传的文件等应用数据不会被迁移,推荐使用第一种完整迁移方案。
内容的提问来源于stack exchange,提问作者Ma Stanley Chi Hang
相关产品推荐
相关产品推荐

