Docker 数据卷 Volume 迁移方案如何做

作者:袖梨 2026-08-08

Docker数据卷迁移分命名卷和绑定挂载两种:命名卷需通过临时容器tar打包解包;绑定挂载可直接rsync宿主机目录;跨平台或大体积数据推荐两遍rsync增量同步,迁移后须验证内容、权限及应用连通性。

直接迁移 Docker 数据卷,核心在于“不碰宿主机路径、不依赖人工定位”,而是用容器临时挂载 + tar 打包解包的方式完成。命名卷(named volume)和绑定挂载(bind mount)处理方式不同,下面分情况说明。

命名卷迁移:导出 → 传输 → 创建空卷 → 导入

命名卷由 Docker 自动管理(路径在 /var/lib/docker/volumes/xxx/_data),不能直接复制目录,必须通过容器中转。

  1. 在源机导出数据:用临时容器把卷内容打包成 tar 文件

docker run --rm -v oradata:/data -v $(pwd):/backup alpine tar czf /backup/oradata.tar.gz -C /data .

  1. 把 tar 文件传到目标机(如用 scp)
  2. 在目标机创建同名空卷:docker volume create oradata
  3. 用临时容器解包到新卷:

docker run --rm -v oradata:/data -v $(pwd):/backup alpine sh -c "tar xzf /backup/oradata.tar.gz -C /data"

绑定挂载迁移:直接复制宿主机目录

如果使用 -v /host/path:/container/path 这种方式,数据就在宿主机指定路径里,迁移最简单:

  1. 确认挂载路径(docker inspect 容器名 | jq '.[0].Mounts'
  2. 停容器后,用 rsync -avz /host/path/ user@target:/host/path/ 同步目录
  3. 目标机启动容器时,确保挂载路径存在且权限一致(尤其注意用户 UID/GID)

跨平台或大体积数据:加一层增量同步

对不能长时间停机的业务(比如日志服务、缓存中间件),可采用两遍 rsync 策略:

  1. 第一遍:容器仍在运行,同步大部分数据(允许少量追写)
  2. 第二遍:停容器后立即再跑一次 rsync,只同步变更部分,耗时极短
  3. 恢复时,直接在目标机用原路径挂载启动即可

验证与收尾

迁移完成后别跳过这步:

  1. 检查卷内容是否完整:docker run --rm -v oradata:/data alpine ls -l /data
  2. 启动容器,看日志是否有权限错误或路径缺失(常见于 SELinux 或 rootless Docker)
  3. 对数据库类应用,额外执行一次连接测试和简单读写验证
  4. 旧卷保留至少 48 小时,确认无误后再清理

相关文章

精彩推荐