最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Docker 数据卷 Volume 迁移方案如何做
时间:2026-08-08 07:02:00 编辑:袖梨 来源:一聚教程网
Docker数据卷迁移分命名卷和绑定挂载两种:命名卷需通过临时容器tar打包解包;绑定挂载可直接rsync宿主机目录;跨平台或大体积数据推荐两遍rsync增量同步,迁移后须验证内容、权限及应用连通性。
直接迁移 Docker 数据卷,核心在于“不碰宿主机路径、不依赖人工定位”,而是用容器临时挂载 + tar 打包解包的方式完成。命名卷(named volume)和绑定挂载(bind mount)处理方式不同,下面分情况说明。
命名卷迁移:导出 → 传输 → 创建空卷 → 导入
命名卷由 Docker 自动管理(路径在 /var/lib/docker/volumes/xxx/_data),不能直接复制目录,必须通过容器中转。
- 在源机导出数据:用临时容器把卷内容打包成 tar 文件
docker run --rm -v oradata:/data -v $(pwd):/backup alpine tar czf /backup/oradata.tar.gz -C /data .
- 把 tar 文件传到目标机(如用 scp)
- 在目标机创建同名空卷:
docker volume create oradata - 用临时容器解包到新卷:
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 这种方式,数据就在宿主机指定路径里,迁移最简单:
- 确认挂载路径(
docker inspect 容器名 | jq '.[0].Mounts') - 停容器后,用
rsync -avz /host/path/ user@target:/host/path/同步目录 - 目标机启动容器时,确保挂载路径存在且权限一致(尤其注意用户 UID/GID)
跨平台或大体积数据:加一层增量同步
对不能长时间停机的业务(比如日志服务、缓存中间件),可采用两遍 rsync 策略:
- 第一遍:容器仍在运行,同步大部分数据(允许少量追写)
- 第二遍:停容器后立即再跑一次 rsync,只同步变更部分,耗时极短
- 恢复时,直接在目标机用原路径挂载启动即可
验证与收尾
迁移完成后别跳过这步:
- 检查卷内容是否完整:
docker run --rm -v oradata:/data alpine ls -l /data - 启动容器,看日志是否有权限错误或路径缺失(常见于 SELinux 或 rootless Docker)
- 对数据库类应用,额外执行一次连接测试和简单读写验证
- 旧卷保留至少 48 小时,确认无误后再清理