Docker Compose 容器数据怎么备份和恢复?操作命令有哪些?

文章导读
Docker Compose 容器数据备份恢复最稳妥的方式是直接备份挂载卷或宿主机目录,配合容器停止操作确保数据一致性,适合生产环境和重要数据场景。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 参考来源
A A

Docker Compose 容器数据备份恢复最稳妥的方式是直接备份挂载卷或宿主机目录,配合容器停止操作确保数据一致性,适合生产环境和重要数据场景。

先说结论:优先备份持久化卷和配置文件,容器本身可通过镜像重建,数据才是核心资产

  • 适合:使用卷挂载或宿主机目录持久化数据的 Compose 服务
  • 先看:确认数据存储在卷中还是容器内部,两者备份方式不同
  • 建议:定期备份 + 恢复演练,避免备份文件无法使用

命令速用版

备份命名卷数据:

docker run `--rm` -v myvolume:/data -v /backup:/backup alpine tar cvf /backup/data.tar /data

恢复命名卷数据:

docker run `--rm` -v myvolume:/data -v /backup:/backup alpine tar xvf /backup/data.tar -C /data

备份宿主机挂载目录:

tar cvf /backup/app-data.tar /path/to/host/data

使用 docker cp 备份容器内文件:

docker cp container-name:/path/in/container /host/backup/path/

恢复文件到容器:

docker cp /host/backup/path/ container-name:/path/in/container/

为什么会这样

Docker 容器本身是临时的,删除容器后内部数据会丢失。真正需要保护的是两类内容:一是通过卷(volume)或绑定挂载(bind mount)持久化的数据,二是应用的配置状态。镜像可以通过 Dockerfile 或 docker save 重新获取,但业务数据一旦丢失无法重建。

备份卷的本质是把卷中的数据打包到宿主机,恢复时再解压回卷或目录。容器运行状态下备份可能存在数据不一致风险,尤其是数据库类服务,建议先停止服务或确保应用处于静默状态。

分步处理

第一步:确认数据存储位置

查看 docker-compose.yml 中的 volumes 配置,确认数据是挂载到命名卷还是宿主机目录。运行以下命令查看卷信息:

docker volume ls
docker inspect 容器名 | grep -A 10 Mounts

如果数据在命名卷中,按卷备份;如果在宿主机目录,直接打包目录即可。

第二步:停止相关服务

Docker Compose 容器数据怎么备份和恢复?操作命令有哪些?

对于数据库或有状态服务,先停止容器确保数据一致性:

docker-compose stop 服务名

无状态服务或可容忍短暂不一致的场景,可在运行时备份,但需知晓风险。

第三步:执行备份

命名卷备份使用临时容器配合 tar 命令,将卷内容打包到宿主机备份目录。宿主机目录备份直接用 tar 或 rsync 等工具。配置文件如 docker-compose.yml、环境变量文件等也应一并备份。

第四步:验证备份文件

检查备份文件是否存在且大小合理:

ls -lh /backup/data.tar
tar tvf /backup/data.tar | head

确认文件可读取,避免备份损坏。

第五步:恢复操作

恢复时先确保目标卷或目录存在,然后使用对应的解压命令。数据库类服务恢复后需启动容器并验证数据完整性。

怎么验证是否生效

恢复后进入容器检查数据是否存在:

docker-compose exec 服务名 ls /data
docker-compose exec 服务名 数据库客户端命令 查询数据

对于数据库,执行简单查询确认记录存在。对于应用服务,检查日志无报错且功能正常。建议在测试环境先做一次完整恢复演练,确认备份流程可用。

常见坑

容器运行中备份数据库可能导致数据不一致,尤其是写入频繁的服务。部分旧版本 Docker 不支持向已停止容器复制文件,docker cp 需注意版本兼容性。备份文件权限问题可能导致恢复失败,尤其是使用不同用户运行容器时。只备份容器不备份卷,容器删除后数据仍会丢失。备份文件未定期验证,恢复时才发现损坏或格式不兼容。

参考来源

  • Docker Compose 数据备份和恢复 - 使用 tar 命令备份卷数据的操作说明
  • Docker 备份与恢复全攻略:从命令行到 GUI 的完整操作手册 - docker export/save/import/load 命令详解
  • 如何利用 Docker Cp 实现容器数据备份与恢复教程 - docker cp 命令使用场景和注意事项
  • Docker 下 MySQL 备份与恢复 - 百度开发者中心 - 数据库容器备份恢复流程
  • neo4j 在 docker 部署 (docker compose) 下备份和恢复 - 特定应用的备份恢复实践