是什么

Dev Container 让团队在 Docker 容器中运行 Claude Code,实现一致的隔离开发环境。Claude Code 在容器内执行命令,文件编辑反映到宿主机仓库。通过 Dev Container Feature 安装,支持 VS Code、GitHub Codespaces、JetBrains 等编辑器。

核心机制

安装方式:在 .devcontainer/devcontainer.json 中添加 Feature:

{
  "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
  "features": {
    "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
  }
}

持久化认证:挂载 named volume 到 ~/.claude,跨重建保留认证 token 和设置:

"mounts": ["source=claude-code-config,target=/home/node/.claude,type=volume"]

组织策略强制:将 managed-settings.json 复制到 /etc/claude-code/managed-settings.json(最高优先级,覆盖用户设置)。

网络出口限制:参考 init-firewall.sh 脚本,只允许 Claude Code 需要的域名,需要 NET_ADMIN 和 NET_RAW 能力。

无权限提示运行:容器内非 root 用户可使用 --dangerously-skip-permissions,但仍可访问容器内的 Claude Code 凭证和 bind-mount 的工作区文件。

关键细节

  • Feature 版本(:1.0)固定安装脚本,不固定 Claude Code 版本
  • 固定 Claude Code 版本:在 Dockerfile 中 npm install -g @anthropic-ai/claude-code@X.Y.Z
  • 禁用自动更新:DISABLE_AUTOUPDATER=1
  • 禁用遥测:CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
  • Codespaces 认证:用 ANTHROPIC_API_KEY 或 CLAUDE_CODE_OAUTH_TOKEN 作为 Codespaces Secret
  • 参考容器:github.com/anthropics/claude-code/tree/main/.devcontainer

关联

  • sandboxing — 沙箱隔离(与 Dev Container 互补的安全层)
  • headless — 无权限提示的自主运行模式

实践要点

  • --dangerously-skip-permissions 下,恶意项目仍可访问容器内的 Claude Code 凭证,只在可信仓库中使用
  • 避免挂载 ~/.ssh 等宿主机密钥到容器,改用仓库级或短期 token
  • 项目级 .mcp.json 是在容器中共享 MCP Server 配置的推荐方式
  • 策略文件通过 Dockerfile 注入,但仓库有写权限的人可以修改;更强的策略用 server-managed settings
  • 每个项目用独立 volume(${devcontainerId})避免不同项目的认证状态互相干扰