数据持久化配置
容器重建不丢数据 —— 这一步千万别跳过
血泪教训
😱 升级容器后数据全没了?
你满心欢喜地升级了容器镜像,重启之后发现 —— 配置没了,数据没了,之前改的所有东西全部归零。这不是 bug,这是 Docker 的正常行为:容器是临时的,删掉就啥都不剩。你不做持久化,它就不帮你存。
解决方案
✅ Docker Volume Mapping 一招搞定
用 Docker volume mapping 把容器内的重要目录映射到宿主机的物理路径上。容器随便删、随便重建,只要映射路径里的文件还在,数据就不会丢。这是 Docker 最基本也最重要的操作,没有之一。
四步搞定持久化
1
创建目录结构
在 NAS 上创建好数据目录。目录结构清晰,后面备份迁移都方便。建议按功能分成 data、config、logs、memory 四个子目录。
2
映射卷到容器
在 docker-compose.yml 或者 Docker 管理界面里,把宿主机目录映射到容器内对应的路径。映射之后容器写入的数据实际上就存在 NAS 硬盘上了。
3
设置定时备份
虽然数据已经在 NAS 上了,但 RAID 保护不了你手滑删文件。写个简单的备份脚本,配合 cron 定时跑,多一层保险。
4
验证恢复流程
别光备份不测试。把容器删掉重建一次,确认数据还在、配置还生效、服务能正常启动。等到真出事的时候再发现备份是坏的就晚了。
Volume 映射示例
下面是推荐的目录结构和映射方式,适用于群晖、威联通、Unraid 等所有 NAS:
docker-compose.yml 卷映射
services:
openclaw:
image: openclaw/openclaw:latest
volumes:
# 应用数据(对话记录、用户数据等)
- /path/to/nas/openclaw/data:/app/data
# 配置文件(API Key、模型设置等)
- /path/to/nas/openclaw/config:/app/config
# 日志文件(排查问题用)
- /path/to/nas/openclaw/logs:/app/logs
# 记忆存储(Agent 的长期记忆)
- /path/to/nas/openclaw/memory:/app/memory
# 各 NAS 的实际路径:
# 群晖: /volume1/docker/openclaw/
# 威联通: /share/Container/openclaw/
# Unraid: /mnt/user/appdata/openclaw/
自动备份脚本
写个脚本,每天自动打包一份备份。保留最近 7 天的,自动清理旧的:
备份脚本
#!/bin/bash
# OpenClaw 自动备份脚本
BACKUP_DIR="/volume1/backups/openclaw"
DATA_DIR="/volume1/docker/openclaw"
DATE=$(date +%Y%m%d_%H%M%S)
# 创建备份目录
mkdir -p "$BACKUP_DIR"
# 打包数据
tar -czf "$BACKUP_DIR/openclaw_$DATE.tar.gz" \
-C "$DATA_DIR" data config memory
# 清理 7 天前的旧备份
find "$BACKUP_DIR" -name "openclaw_*.tar.gz" -mtime +7 -delete
echo "Backup completed: openclaw_$DATE.tar.gz"
定时任务配置
把备份脚本加到 cron 里,每天凌晨 3 点自动执行:
crontab 定时备份
# 编辑 crontab
crontab -e
# 添加这一行(每天凌晨 3 点执行备份)
0 3 * * * /volume1/docker/openclaw/backup.sh >> /volume1/docker/openclaw/logs/backup.log 2>&1
# 群晖也可以用 DSM 的"任务计划"功能
# 控制面板 → 任务计划 → 新增 → 用户自定义脚本
# 把备份命令填进去,设好每天执行时间就行
RAID 不是备份!RAID 保护你的数据不因为单块硬盘挂掉而丢失,但它保护不了你误删文件、ransomware 加密、NAS 主板烧了、家里遭贼这些情况。真正的备份策略是 3-2-1:3 份数据、2 种介质、1 份异地。至少把备份文件同步到一个云盘或者另一台设备上。
进阶备份方案
如果你对数据安全要求更高,可以看看进阶备份教程,里面讲了增量备份、加密备份、云端同步等方案:
不想自己管数据备份?MOLILI 的托管方案自带自动备份和数据恢复功能,省心。
了解 MOLILI →