基于 CNB 容器开发环境的配置漫游能力,实现 Claude Code 配置的自动持久化和恢复。
/workspace/ ├── setup/ # 打包进镜像 │ ├── setup-claude.sh # Claude Code 统一安装配置脚本 │ └── node-install.sh # Node.js 安装脚本 │ ├── image-scripts/ # 打包进镜像 │ └── claude-restore.sh # 会话数据恢复脚本 │ ├── dev/ # 不打包进镜像(.dockerignore) │ ├── inject-dockerfile.sh # Dockerfile 注入处理 │ ├── generate-cnb-yml.sh # 生成 cnb.yml 配置文件 │ └── README.md # 本地开发说明 │ ├── envs/ # 环境定义目录 │ └── {env-name}/Dockerfile # 使用 @inject 指令 │ ├── cnb.yml # 生成的 CNB 配置(不打包进镜像) ├── .dockerignore # 排除 dev/ 和 cnb.yml └── .cnb.yml # CNB CI/CD 配置
在环境的 Dockerfile 中添加 @inject: claude:
FROM golang:1.22.3 # 环境特定配置 RUN apt-get update && apt-get install -y git vim # 公共基础设施(自动注入) # @inject-start # @inject: node # @inject: claude # @inject-end WORKDIR /workspace
构建时,注入脚本会自动处理:
# 自动生成的代码: COPY setup/setup-claude.sh /tmp/setup-claude.sh COPY image-scripts/claude-restore.sh /tmp/claude-restore.sh RUN chmod +x /tmp/setup-claude.sh && \ mkdir -p /opt/cnb/scripts && \ mv /tmp/claude-restore.sh /opt/cnb/scripts/claude-restore.sh && \ chmod +x /opt/cnb/scripts/claude-restore.sh && \ /tmp/setup-claude.sh && \ rm /tmp/setup-claude.sh
setup-claude.sh 功能:
# 本地构建
bash dev/build-env.sh golang-1.22.3
# 或推送触发 CI
git push origin main
CNB 平台读取环境的 cnb.yml,自动执行:
bash /opt/cnb/scripts/claude-restore.sh
恢复配置:
~/.cnb/claude/${CNB_REPO_SLUG_LOWERCASE}/~/.claude → ~/.cnb/claude/.../~/.cnb/claude/${CNB_REPO_SLUG_LOWERCASE}/ ├── .claude/ # Claude 配置目录 ├── .claude.json # Claude 配置文件 └── .claude.json.backup # 配置备份
~/.claude -> ~/.cnb/claude/${CNB_REPO_SLUG_LOWERCASE}/.claude ~/.claude.json -> ~/.cnb/claude/${CNB_REPO_SLUG_LOWERCASE}/.claude.json ~/.claude.json.backup -> ~/.cnb/claude/${CNB_REPO_SLUG_LOWERCASE}/.claude.json.backup
┌──────────────────┐ │ 构建镜像 │ ← setup/ 打包进镜像 └────────┬─────────┘ │ v ┌──────────────────┐ │ 生成 cnb.yml │ ← 本地执行 dev/generate-cnb-yml.sh └────────┬─────────┘ │ v ┌──────────────────┐ │ 容器启动 │ ← CNB 平台 └────────┬─────────┘ │ v ┌──────────────────┐ │ 执行恢复脚本 │ ← bash /workspace/setup/claude-restore.sh └────────┬─────────┘ │ v ┌──────────────────┐ │ 配置自动恢复 │ ← 从 ~/.cnb/ 漫游目录 └────────┬─────────┘ │ v ┌──────────────────┐ │ Claude 可用 │ └──────────────────┘
CNB_REPO_SLUG_LOWERCASE - 项目标识符CLAUDE_HTTP_PROXY - HTTP 代理CLAUDE_HTTPS_PROXY - HTTPS 代理CLAUDE_AUTH_TOKEN - 认证令牌# 自动生成的配置
$:
vscode:
- name: claude-code-environment
services:
- vscode
stages:
- name: Initialize Claude Code Environment
script: |
if [ -f "/workspace/setup/claude-restore.sh" ]; then
bash /workspace/setup/claude-restore.sh
else
echo "Error: Claude restore script not found"
exit 1
fi
特点:
# 编辑脚本
vi setup/claude-restore.sh
# 重新构建镜像
docker build -t your-registry/project:tag .
docker push your-registry/project:tag
# 如果环境变量变化
bash dev/generate-cnb-yml.sh
目录隔离
setup/ - 打包进镜像dev/ - 本地使用,不打包路径一致性
/workspace/setup/claude-restore.sh漫游限制
配置生成
# 检查镜像
docker run --rm your-image ls -la /workspace/setup/claude-restore.sh
# 手动执行
bash /workspace/setup/claude-restore.sh
bash dev/generate-cnb-yml.sh
dev/README.mdsetup/claude-code-install.shsetup/claude-restore.sh