Docker Compose 数据备份教程:卷、数据库与恢复演练
讲解 Ubuntu VPS 上 Docker Compose 应用的命名卷、绑定目录和数据库备份,覆盖一致性、异地副本、校验、自动化及恢复演练。

Docker Compose 数据备份教程
Docker Compose 让多容器应用容易部署,但重新创建容器不会自动保护业务数据。可靠备份必须区分 Compose 配置、命名卷、绑定目录、数据库逻辑数据和密钥,并且定期验证恢复。本教程依据 Docker 官方卷与备份文档整理,示例适用于 Ubuntu VPS 上的常见 Web 应用。
先识别真正需要保存的数据
执行 docker compose config 查看合并后的配置,再用 docker volume ls 和 docker inspect 确认卷。Compose 文件、环境变量模板、反向代理配置和部署脚本应进入私有版本库;数据库文件、上传目录和应用状态属于运行数据。镜像本身通常可重新拉取,不应把整个 Docker 安装目录粗暴打包当作唯一备份。
命名卷由 Docker 管理,绑定目录则直接对应宿主机路径。官方 Compose 文档指出,顶层 volumes 声明定义持久存储,服务必须显式挂载才能访问。先制作资产清单,记录卷名、挂载目标、数据所有者和恢复顺序。服务器迁移思路可参考 Linux VPS 迁移教程。
数据库优先使用逻辑备份
MySQL、MariaDB 和 PostgreSQL 在运行时会维护缓存、日志和事务状态,直接复制活动数据目录可能得到不一致副本。优先使用数据库官方导出工具,在容器内生成逻辑备份并写入受控目录。例如 PostgreSQL 可使用 pg_dump,MySQL 可使用 mysqldump。导出文件完成后检查退出码、大小和校验值,并加密传送到独立存储。
如果必须备份数据库卷,应先按数据库文档执行一致性快照或短暂停止写入。docker compose stop 会停止服务但保留容器,docker compose down 可能移除容器和网络;不要附加 -v,否则命名卷可能被删除。操作前保留 SSH 会话并确认磁盘空间。
备份命名卷
官方 Docker 文档提供通过临时容器挂载卷与宿主机目录的方式。通用思路是以只读方式挂载源卷,把内容归档到备份目录:
docker run --rm \
-v myapp_data:/source:ro \
-v /srv/backups:/backup \
alpine sh -c 'cd /source && tar czf /backup/myapp-data.tgz .'
归档文件名应包含 UTC 时间,完成后生成 SHA-256 校验值。不要把备份只留在同一块 VPS 磁盘;主机故障、误删或账户异常会同时影响源数据和副本。至少保留一个异地或对象存储副本,并设置生命周期与访问权限。
恢复流程比备份命令更重要
恢复时先创建空卷,再用临时容器把归档解压到卷中,然后启动应用。恢复前核对镜像版本、数据库版本、用户和文件权限。数据库逻辑备份应导入新建数据库,而不是覆盖未知状态的数据目录。应用启动后检查登录、上传、后台任务和错误日志。
每月至少在隔离环境做一次恢复演练,记录恢复用时与缺失步骤。只有成功恢复过的副本才能被视为有效备份。可结合 Ubuntu VPS 自动安全更新教程安排补丁和维护窗口。
自动化和保留策略
使用 systemd timer 或受控计划任务执行导出、归档、校验、上传和过期清理。脚本应在任何一步失败时退出并告警,避免上传空文件后仍标记成功。密钥放在权限受限的环境文件或凭据服务中,不写进 Compose 文件和仓库。
可以采用每日增量或逻辑导出、每周完整副本、月度长期副本,但具体周期取决于可接受的数据损失。备份前后记录文件数量、数据库对象和校验值;远端上传完成后再删除本地旧副本。磁盘容量告警必须早于备份空间耗尽。
上线检查清单
确认 Compose 配置可重建、所有持久卷已列入清单、数据库使用一致性方式导出、备份完成校验与加密、至少一份副本位于独立故障域,并已经在隔离环境恢复。不要把容器仍能启动误认为数据安全,也不要把云平台快照当作唯一方案。分层备份加定期恢复演练,才是 Docker Compose 应用可持续维护的基础。


