Docker数据卷迁移分命名卷和绑定挂载两种:命名卷需通过临时容器tar打包解包;绑定挂载可直接rsync宿主机目录;跨平台或大体积数据推荐两遍rsync增量同步,迁移后须验证内容、权限及应用连通性。
直接迁移 Docker 数据卷,核心在于“不碰宿主机路径、不依赖人工定位”,而是用容器临时挂载 + tar 打包解包的方式完成。命名卷(named volume)和绑定挂载(bind mount)处理方式不同,下面分情况说明。
命名卷由 Docker 自动管理(路径在 /var/lib/docker/volumes/xxx/_data),不能直接复制目录,必须通过容器中转。
docker run --rm -v oradata:/data -v $(pwd):/backup alpine tar czf /backup/oradata.tar.gz -C /data .
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/ 同步目录对不能长时间停机的业务(比如日志服务、缓存中间件),可采用两遍 rsync 策略:
迁移完成后别跳过这步:
docker run --rm -v oradata:/data alpine ls -l /data