思路与原理
用临时容器把卷内容打包成 tar 到宿主目录,是 Docker 环境下最通用的卷备份方式:临时容器同时挂载数据卷与宿主备份目录,用 tar 打包即可,不依赖业务容器配合。恢复时反向解包回目标卷。数据库这类带写入缓冲的服务,应优先做逻辑导出,或确认可以停写之后再打包文件。
基本信息
| 备份方式 | 临时容器挂载卷与宿主目录,tar 打包 |
|---|---|
| 恢复方式 | 反向解包到目标卷 |
| 一致性建议 | 先停写,或做快照与逻辑导出 |
| 权限注意 | 解包后核对属主与容器运行用户 |
| 适用平台 | Docker Engine(Linux 宿主) |
典型使用场景
- 版本升级前的数据卷快照备份
- 迁移到新宿主时搬运卷数据
- 定期把关键卷打包到备份目录或对象存储
- 恢复演练:确认备份包真的能还原
- 误删数据后的回滚
备份与恢复
备份与恢复
# 备份:临时容器同时挂载数据卷与宿主备份目录
docker run --rm -v pgdata:/var/lib/data -v "$PWD":/backup alpine tar czf /backup/pgdata-$(date +%F).tgz -C /var/lib/data .
tar tzf pgdata-2026-10-12.tgz | head # 校验包内容,确认非空且结构正确
# 恢复:先备份当前内容,再反向解包到目标卷
docker run --rm -v pgdata:/var/lib/data -v "$PWD":/backup alpine sh -c 'tar xzf /backup/pgdata-2026-10-12.tgz -C /var/lib/data'各环节注意点
| 环节 | 做法 | 注意 |
|---|---|---|
| 备份 | 临时容器加 tar 打包 | 以 root 执行,注意文件权限 |
| 校验 | tar tzf 列出内容 | 确认包非空且结构正确 |
| 恢复 | 反向解包到目标卷 | 先备份当前内容再覆盖 |
| 数据库卷 | 先逻辑导出或停写 | 直接打包文件可能不一致 |
临时容器以 root 解包时,恢复后要核对目录属主是否符合容器运行用户要求,避免应用因权限问题无法写入。
备份包要放在卷之外的位置(宿主目录、对象存储等),否则宿主故障时数据与备份会一起丢失。
定期做恢复演练比把备份做多份更重要:没有验证过能否还原的备份,等同于没有备份。