Docker容器数据备份需针对挂载的外部存储,绑定挂载和命名卷是重点;用rsync实现增量备份,配合crontab定时执行,并支持7天快照清理与快速恢复。

Docker 容器本身不保存数据,所有写入容器文件系统的变更在容器删除后即丢失。真正需要备份的是挂载进容器的数据——包括绑定挂载(bind mount)和命名卷(named volume)。定时增量备份的核心,是定期捕获这些外部存储路径中变化的部分,而非每次都全量复制。
关键前提:先确认数据落盘位置
你得知道容器的数据到底存在哪。常见两种方式:
-
绑定挂载:比如启动时用了
-v /host/data:/app/data,那真实数据就在宿主机的/host/data目录下 -
命名卷:比如
-v myapp_data:/app/data,数据实际存于 Docker 管理的目录,通常是/var/lib/docker/volumes/myapp_data/_data
运行 docker inspect 容器名 | grep -A 10 "Mounts" 可直接看到挂载详情。
推荐工具:rsync(轻量、成熟、天然支持增量)
它只传输变动的文件块,速度快、带宽省,适合每日执行。不需要额外安装服务端,一条命令就能跑起来。
- 备份脚本示例(保存为
/opt/scripts/backup-app.sh):#!/bin/bash set -e BACKUP_ROOT="/backup/app" SOURCE="/var/lib/docker/volumes/myapp_data/_data" # 替换为你的真实路径 TIMESTAMP=$(date +%Y%m%d_%H%M%S) TARGET="$BACKUP_ROOT/latest" </li></ul><p>mkdir -p "$BACKUP_ROOT"</p><h1>rsync 增量同步:--link-dest 指向上一次完整快照,生成硬链接节省空间</h1><p>if [ -d "$BACKUP_ROOT/last" ]; then rsync -av --delete --link-dest="$BACKUP_ROOT/last" "$SOURCE/" "$BACKUP_ROOT/$TIMESTAMP/" rm -rf "$BACKUP_ROOT/last" mv "$BACKUP_ROOT/$TIMESTAMP" "$BACKUP_ROOT/last" else rsync -av --delete "$SOURCE/" "$BACKUP_ROOT/last" fi</p><h1>清理 7 天前的快照(可选)</h1><p>find "$BACKUP<em>ROOT" -maxdepth 1 -name "[0-9]*</em>[0-9]*" -type d -mtime +7 -exec rm -rf {} \;</p><div class="aritcle_card flexRow"> <div class="artcardd flexRow"> <a class="aritcle_card_img" href="/xiazai/skill6198" title="Dolphindb Docker"><img src="https://img.php.cn/upload/skill/000/000/081/179083807043363.jpg" alt="Dolphindb Docker" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a> <div class="aritcle_card_info flexColumn"> <a href="/xiazai/skill6198" title="Dolphindb Docker">Dolphindb Docker</a> <p>自动化 DolphinDB Docker 部署,支持自动架构检测(ARM64/x86_64),智能内存分配(50% 规则)以及完整数据持久化。</p> </div> <a href="/xiazai/skill6198" title="Dolphindb Docker" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span> </a> </div> </div>定时执行:用宿主机 crontab 即可
编辑任务:
crontab -e,添加一行:0 2 <em> </em> * /bin/bash /opt/scripts/backup-app.sh >> /var/log/app-backup.log 2>&1表示每天凌晨 2 点执行。日志会追加记录,便于排查失败原因。
验证与恢复很简单
- 查看最近一次备份:
ls -l /backup/app/last,内容结构应与源目录一致 - 恢复时,停掉容器 → 清空原卷或挂载点 →
rsync -av /backup/app/last/ /目标路径/→ 启动容器
不需要解压、不用导入导出,就是文件拷贝。
不复杂但容易忽略。
- 查看最近一次备份:

















