是什么
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})避免不同项目的认证状态互相干扰