导出Docker容器镜像到其他系统时如何查找需导出的Volume数据
结论
你定位到的/var/lib/docker/volumes/spring-microservies-course_psdb-volume/_data就是需要导出的Volume全量数据目录,执行ls命令返回的PostgreSQL配置文件、数据目录就是完整的持久化数据,没有找错。
完整迁移操作步骤
- 第一步:停止原容器,避免导出过程中数据读写产生不一致
命令:sudo docker stop postgresql - 第二步:导出容器镜像
先将当前运行状态的容器提交为可迁移镜像:sudo docker commit postgresql postgresql:migrate
导出镜像为压缩包:sudo docker save -o postgresql-migrate.tar postgresql:migrate - 第三步:导出Volume数据(两种方案二选一,更推荐第二种跨设备兼容方案)
方案1:直接打包宿主机Volume目录sudo tar -cvf psdb-volume.tar -C /var/lib/docker/volumes/spring-microservies-course_psdb-volume/_data .
方案2:临时容器导出(无需手动找Volume路径,适配所有Docker存储驱动/版本)sudo docker run --rm -v spring-microservies-course_psdb-volume:/volume -v $(pwd):/backup alpine tar -cvf /backup/psdb-volume.tar -C /volume . - 第四步:目标设备导入操作
- 导入镜像:
sudo docker load -i postgresql-migrate.tar - 创建同名Volume:
sudo docker volume create spring-microservies-course_psdb-volume - 导入Volume数据:
sudo docker run --rm -v spring-microservies-course_psdb-volume:/volume -v $(pwd):/backup alpine tar -xvf /backup/psdb-volume.tar -C /volume - 按原容器启动参数启动新容器即可,自动加载导入的Volume数据
- 导入镜像:
注意事项
- 禁止直接拷贝Volume目录到目标设备,容易因为权限、Docker存储驱动差异导致数据不可用,必须用tar打包的方式迁移
- 如果原容器需要持续运行,可以在stop导出后立刻执行
sudo docker start postgresql恢复服务
内容的提问来源于stack exchange,提问作者AndreaNobili
相关产品推荐
相关产品推荐

