HolyClaude数据持久化详解:让Claude记忆、代码与凭证在容器重建后完美存活
【免费下载链接】HolyClaudeAI coding workstation: Claude Code + web UI + 8 AI CLIs + headless browser + 50+ tools项目地址: https://gitcode.com/gh_mirrors/ho/HolyClaude
HolyClaude 数据持久化是这套 AI 编程工作站最容易被忽视、却最关键的能力。它的核心思路很朴素:把 Claude 的记忆(CLAUDE.md)、你的登录凭证、Git/GitHub 配置,以及/workspace里的代码,全部通过Docker 挂载放到容器之外。这样无论你怎么docker compose down、升级镜像、重建容器,这些状态都会完美存活,下次启动直接无缝衔接,不用再重新登录、不用再解释项目背景。
为什么容器重建会"丢"东西
Docker 容器天生是"易碎品"。容器内部的文件系统随容器创建而生、随容器销毁而灭。也就是说:
- 你登录 Claude 的OAuth 凭证写在容器里 → 容器一删就没了
- Claude 记住你项目背景的
CLAUDE.md记忆文件→ 重建后回到出厂状态 - 你的代码如果不挂出来 → 升级镜像瞬间蒸发
HolyClaude 数据持久化要解决的,就是让"容器可以随时换皮,但数据长留原地"。它没有让你手写复杂的 volume 脚本,而是用两条绑定挂载(bind mount)打地基,再靠一套启动时自动恢复 + 运行时定期存档的机制兜底。
两大挂载:数据持久化的地基
打开 docker-compose.yaml,最核心的就是这两行volumes:
volumes: - ./data/claude:/home/claude/.claude # 记忆、凭证、配置都在这里 - ./workspace:/workspace # 你的代码和项目都在这里./data/claude↔/home/claude/.claude:Claude 的记忆文件CLAUDE.md、settings.json、Codex/Gemini 配置、以及各类 CLI 凭证统统落在容器内.claude目录,而它被挂载到了宿主机的./data/claude。./workspace↔/workspace:你写的每一个文件、克隆的每一个仓库,都直接写在宿主机上,随时可访问、可备份。
这两条挂载,加上后文提到的会话存档,共同构成了容器重建后数据保留的全部地基。完整挂载清单与容器内外路径对照,可参考 README.md 的「Data & Persistence」表格。
Claude 记忆与登录会话:60 秒自动存档
很多人以为挂上.claude就万事大吉,其实 Claude Code 的登录会话存在另一个位置——~/.claude.json,它并不在挂载目录里。如果不管它,重建容器时 Claude 会把它重置成"未完成 onboarding"的空状态,你的登录就白登了。
HolyClaude 用一个精巧的"会话桥"解决了这个问题:
- 启动时:scripts/entrypoint.sh 会调用 scripts/persist-claude-json.mjs,把存档的会话还原回
~/.claude.json。 - 运行时:s6-overlay 常驻一个守护循环(见 s6-overlay/s6-rc.d/persist-claude-json/run),默认每 60 秒把当前有效的
~/.claude.json同步一份到~/.claude/.claude.json.persist(这个文件在挂载目录里,所以能存活)。
这套逻辑还有防误伤保护:空文件、非法 JSON、超大文件、或"只剩 onboarding 状态"的内容,都不会去覆盖一份有效的登录会话。换句话说,即使某次状态异常,你的凭证也绝不会被冲掉。
| 数据 | 容器内位置 | 宿主机位置 | 重建后存活 |
|---|---|---|---|
Claude 记忆CLAUDE.md与设置 | /home/claude/.claude | ./data/claude | ✅ |
| 登录会话(OAuth / API Key) | /home/claude/.claude.json | ./data/claude/.claude.json.persist | ✅ |
| Git 全局 / XDG 配置 | /home/claude/.gitconfig | ./data/claude/.gitconfig | ✅ |
| GitHub CLI 凭证 | /home/claude/.config/gh | ./data/claude/.config/gh | ✅ |
| 你的代码与项目 | /workspace | ./workspace | ✅ |
| CloudCLI 账号 | /home/claude/.cloudcli | 默认容器内(可选挂载) | ⚠️ 可选 |
容器重启后,谁在自动恢复
重建不是手动操作,HolyClaude 靠启动脚本自动完成。整个流程(详见 docs/architecture.md):
- 入口脚本接管→ scripts/entrypoint.sh 做 UID/GID 重映射,并先还原Claude 会话。
- CLI 配置持久化→ 把 Git 全局配置、GitHub CLI 配置软链进挂载的
.claude,缺省的提交身份会自动补种,但绝不覆盖你的手动修改。 - 首次启动引导(仅第一次)→ scripts/bootstrap.sh 复制默认 config/settings.json 和对应版本的记忆模板(config/claude-memory-full.md / config/claude-memory-slim.md),然后打上"哨兵文件"
.holyclaude-bootstrapped。 - 哨兵机制:只要这个文件存在,引导就不会再跑,你的自定义配置从此安全。想重置到出厂状态?只删这个哨兵文件即可,不要删整个
./data/claude。
升级容器不丢数据的正确姿势
日常升级只需两步,数据全程不动:
docker compose pull docker compose up -d因为所有关键状态都在挂载目录,镜像更新只是"换个引擎",记忆、凭证、代码原封不动。
⚠️保护
./data/claude/:它保存着 Claude 会话,可能还包含.config/gh/hosts.yml里的 GitHub 凭证。别把它提交进版本库、别随便分享、别放进未加密的备份。只想重置某项状态时,删对应的具体文件,而不是整个目录。
CloudCLI 账号:可选的持久化
网页端的CloudCLI 账号(~/.cloudcli)默认存在容器内,重建会清空。不过重建账号只要 10 秒,多数人保持默认即可。如果你希望它也存活,在 compose 里加一个命名卷:
services: holyclaude: volumes: - ./data/claude:/home/claude/.claude - ./workspace:/workspace - cloudcli-data:/home/claude/.cloudcli # 加这行 volumes: cloudcli-data: # 再加这个块💡重要:CloudCLI 的 SQLite 数据库需要本地文件锁,千万别放在 NAS / SMB / NFS 网络盘上,否则会报
database is locked。用本地盘的命名卷或本地绑定挂载。
小结
HolyClaude 数据持久化的精髓就一句话:把会变的东西留在容器里,把要留的东西挂到容器外。两条挂载撑起记忆与代码,会话桥(60 秒自动存档 + 启动自动还原)守住你的登录凭证,哨兵机制保护你的自定义配置。掌握这套机制后,你就能放心地随时升级、重建、迁移这台 AI 工作站——数据永远在场,工作永远续上。
更多细节可查阅 docs/architecture.md 与 README.md。
【免费下载链接】HolyClaudeAI coding workstation: Claude Code + web UI + 8 AI CLIs + headless browser + 50+ tools项目地址: https://gitcode.com/gh_mirrors/ho/HolyClaude
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考