logo
0
0
WeChat Login
docs: 文档优化,移除失败镜像

Claude Code 配置漫游方案

基于 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 配置

🚀 使用流程

1. Dockerfile 中使用注入指令

在环境的 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

2. 自动注入(构建时)

构建时,注入脚本会自动处理:

# 自动生成的代码: 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 功能

  • 检查并安装 Node.js(如需要)
  • 通过 npm 安装 Claude Code CLI
  • 初始化配置目录结构
  • 配置代理包装脚本
  • 验证恢复脚本部署

3. 构建镜像

# 本地构建 bash dev/build-env.sh golang-1.22.3 # 或推送触发 CI git push origin main

4. 容器启动(自动)

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 平台自动提供

  • CNB_REPO_SLUG_LOWERCASE - 项目标识符

可选配置(在 CNB 平台设置)

  • CLAUDE_HTTP_PROXY - HTTP 代理
  • CLAUDE_HTTPS_PROXY - HTTPS 代理
  • CLAUDE_AUTH_TOKEN - 认证令牌

📝 cnb.yml 示例

# 自动生成的配置 $: 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

⚠️ 注意事项

  1. 目录隔离

    • setup/ - 打包进镜像
    • dev/ - 本地使用,不打包
  2. 路径一致性

    • 镜像内路径:/workspace/setup/claude-restore.sh
    • cnb.yml 引用相同路径
  3. 漫游限制

    • 最大容量:16MB
    • Claude 配置很小,足够使用
  4. 配置生成

    • cnb.yml 在本地生成
    • 不在容器内动态生成

🆘 故障排查

脚本未找到

# 检查镜像 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.md
  • Claude 安装脚本:setup/claude-code-install.sh
  • 配置恢复脚本:setup/claude-restore.sh