在 CentOS 上使用 Docker 备份数据,常见做法取决于数据存放在哪里。下面按场景给你最实用的方法。
如果你是用 docker run -v 卷名:/data 或 docker-compose 的 volumes 管理的,这是最规范的备份方式。
docker volume ls
mysql_data)docker run --rm \
-v mysql_data:/volume \
-v /backup:/backup \
alpine \
tar czf /backup/mysql_data_$(date +%F).tar.gz -C /volume .
✅ 备份文件在宿主机:/backup/mysql_data_2026-01-21.tar.gz
docker run --rm \
-v mysql_data:/volume \
-v /backup:/backup \
alpine \
tar xzf /backup/mysql_data_2026-01-21.tar.gz -C /volume
如果你是:
-v /data/mysql:/var/lib/mysql
直接备份宿主机目录即可:
tar czf /backup/mysql_$(date +%F).tar.gz /data/mysql
恢复:
tar xzf /backup/mysql_2026-01-21.tar.gz -C /
⚠️ 建议先停止容器再备份,避免数据不一致。
docker exec mysql_container \
sh -c 'mysqldump -uroot -p密码 数据库名' \
> /backup/db_$(date +%F).sql
docker exec pg_container \
pg_dump -U postgres dbname \
> /backup/db_$(date +%F).sql
✅ 数据库必须用语逻辑备份,不能只拷贝文件。
docker commit 容器名 备份镜像
docker save 备份镜像 > /backup/image.tar
⚠️ 不包含 volume 数据,只适合配置型容器。
crontab -e
0 3 * * * docker run --rm -v mysql_data:/volume -v /backup:/backup alpine tar czf /backup/mysql_$(date +\%F).tar.gz -C /volume .
| 场景 | 推荐方式 |
|---|---|
| Docker Volume | alpine + tar |
| 挂载目录 | tar |
| 数据库 | mysqldump / pg_dump |
| 容器配置 | docker commit |
如果你能告诉我:
我可以直接给你一套可复制的备份脚本。