数据卷备份与迁移是什么
数据卷备份的通用做法是用临时容器同时挂载数据卷与宿主机目录,在容器内把卷内容打包成归档文件输出到宿主机;跨机器迁移时把归档拷到新机器,建同名卷后反向解包即可。要点是方向不能写反:备份时卷挂只读、宿主目录挂可写;恢复时卷挂可写、归档挂只读。数据库这类应用必须先在应用层停写或停库,否则归档能解开,但恢复时一致性校验会失败。
基本信息
| 备份方式 | 临时容器同时挂数据卷(只读)与宿主目录(可写),输出归档 |
|---|---|
| 恢复方式 | 反向操作:卷挂可写、归档挂只读,解包回卷 |
| 跨机迁移 | 把归档传到新机器后建同名卷解包,或直接共享 NFS 卷 |
| 一致性要求 | 数据库类卷先停应用或停库;纯文件类可只读挂载后直接打包 |
| 权限 | 归档属主取决于执行容器的用户,恢复后需核对属主与权限 |
典型使用场景
- 升级前的数据退路:先备份数据卷,再改配置或替换镜像
- 更换宿主机时搬运数据,避免重新初始化业务数据
- 环境复制:把生产数据脱敏后拷到测试环境做验证
- 合规留存:按周期把业务数据打包归档到独立存储
- 卷被误删或损坏后的恢复手段,也是最后的兜底路径
备份卷
备份卷
docker run --rm \
-v appdata:/data:ro \
-v "$PWD":/backup \
alpine tar czf /backup/appdata-2026.tgz -C /data .恢复卷
恢复卷
docker volume create appdata
docker run --rm \
-v appdata:/data \
-v "$PWD":/backup:ro \
alpine tar xzf /backup/appdata-2026.tgz -C /data环节与风险点
| 环节 | 挂载方式 | 风险点 |
|---|---|---|
| 备份 | 卷只读,宿主目录可写 | 方向写反会改坏源数据 |
| 恢复 | 卷可写,归档只读 | 归档挂成可写会被解包内容覆盖 |
| 数据库卷 | 先停应用或停库 | 不停写打出的包一致性无法保证 |
| 跨机迁移 | 新机器建同名卷再解包 | 卷名不一致导致应用找不到数据 |
| 权限 | 恢复后核对属主 | 应用以非 root 运行时可能无权读取 |
Windows PowerShell 下宿主目录用 ${PWD} 更稳;路径含中文或空格时先切到纯英文短路径再执行,能避开大部分路径解析问题。
备份必须做恢复演练:只备份不验证的团队,往往在真正需要恢复时才发现归档是空的、解不开,或者恢复出来的数据不可用。