Skip to content

开发容器 Dev Containers

在隔离一致的容器内运行 Claude Code,命令在容器执行、文件改动同步到本地仓库。

是什么

开发容器(dev container)让团队每位工程师都能运行一套完全相同、彼此隔离的环境。把 Claude Code 装进容器后,Claude 执行的命令在容器内运行而非宿主机,而对项目文件的编辑会同步出现在你本地的仓库里。

它适合面向受信任仓库的团队协作:同一份镜像与配置在每个人机器上一致运行,因此也是施加组织策略、限制网络出口、做隔离的理想位置。

怎么工作

  • dev container 以 Docker 容器形式运行,可在本机或云端宿主(如 GitHub Codespaces)上
  • 支持 Dev Containers 规范的编辑器(VS Code、GitHub Codespaces、JetBrains IDE、Cursor)连接到容器;编辑器仍在宿主,但集成终端、语言服务器、构建工具都在容器内运行
  • Claude Code 运行在容器内,因此看到与项目工具链一致的文件、依赖和工具
  • 项目仓库通过 bind-mount 挂载为容器工作区;文件编辑直接反映到宿主仓库
  • 通过 Claude Code Dev Container Feature 安装:在 devcontainer.json 的 features 块加入 ghcr.io/anthropics/devcontainer-features/claude-code,重建容器后在终端运行 claude 登录
  • 在 VS Code 中可用 Claude Code 扩展面板,或在集成终端运行 claude,两者都在容器内运行并共享同一份 ~/.claude 配置
  • Anthropic 账号通过浏览器登录;Amazon Bedrock / Google Vertex AI / Microsoft Foundry 则用云凭证、无浏览器提示

怎么配置 / 用法

最小配置:把以下保存为 .devcontainer/devcontainer.json,或把 features 块加到现有文件:

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

版本标签(如 :1.0)锁定的是 feature 的安装脚本,而非 Claude Code 版本;feature 始终装最新版,且默认会自动更新。

跨重建持久化认证与设置(在 node 用户家目录挂命名卷):

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

按容器环境变量施加策略(关闭非必要流量与自动更新):

json
"containerEnv": {
  "CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC": "1",
  "DISABLE_AUTOUPDATER": "1"
}

从 Dockerfile 放置组织托管设置:

dockerfile
RUN mkdir -p /etc/claude-code
COPY managed-settings.json /etc/claude-code/managed-settings.json

重建容器:命令面板(Mac Cmd+Shift+P / Windows、Linux Ctrl+Shift+P)运行 Dev Containers: Rebuild Container。

什么时候用

  • 希望团队每位工程师都运行一致、隔离的开发环境
  • 需要在镜像与配置层统一施加组织策略(同一份镜像跑在每个人机器上)
  • 只对受信任仓库开发,并希望把 Claude 的命令执行限制在容器内
  • 需要限制容器出站网络,仅放行 Claude Code 与开发工具所需域名
  • 希望以非 root 用户运行、配合 --dangerously-skip-permissions 做无人值守操作

限制 / 坑

  • 即便有容器保护,没有系统能完全免疫所有攻击
  • 使用 --dangerously-skip-permissions 时,dev container 不能阻止恶意项目外泄容器内可访问的任何内容,包括 ~/.claude 中存储的 Claude Code 凭证
  • 默认情况下容器家目录在重建时被丢弃,工程师每次需重新登录(除非挂载命名卷)
  • Dockerfile 在仓库里,有写权限者可改动或移除托管设置步骤;要不可绕过需用 server-managed settings 或 MDM 下发
  • 不支持 dev container 的编辑器(如纯 Vim)不在此工作流内

硬事实速查(12 条)

  • 通过 Claude Code Dev Container Feature 安装:ghcr.io/anthropics/devcontainer-features/claude-code
  • 配置文件名为 .devcontainer/devcontainer.json
  • feature 在 VS Code/Codespaces 中会附带安装 Claude Code VS Code 扩展,其他编辑器忽略该部分
  • Claude Code 在 Linux 上读取 /etc/claude-code/managed-settings.json,并以设置层级中最高优先级生效,覆盖 ~/.claude 与项目 .claude/
  • 持久化状态挂载点为 ~/.claude;若挂到别处需设置 CLAUDE_CONFIG_DIR 指向该路径
  • 按项目隔离状态可在卷 source 名中使用 ${devcontainerId} 变量
  • 在 GitHub Codespaces 中 ~/.claude 在停止/启动间保留,但重建容器时仍被清除;可把 ANTHROPIC_API_KEY 或 CLAUDE_CODE_OAUTH_TOKEN 存为 Codespaces secret
  • 固定 CLI 版本:用 Dockerfile 执行 npm install -g @anthropic-ai/claude-code@X.Y.Z 并设 DISABLE_AUTOUPDATER
  • 参考容器含 init-firewall.sh 脚本,默认阻断除所需域名外的全部出站流量;运行容器内防火墙需通过 runArgs 添加 NET_ADMIN 与 NET_RAW 能力
  • 参考配置由三个文件组成:devcontainer.json、Dockerfile、init-firewall.sh,均非通过 feature 安装时所必需
  • --dangerously-skip-permissions 在以 root 启动时会被拒绝,需确认 remoteUser 为非 root 账户
  • 可设 permissions.disableBypassPermissionsMode 为 "disable" 来禁止使用 --dangerously-skip-permissions;想少提示又不关安全检查可改用 auto mode

官方出处:https://code.claude.com/docs/en/devcontainer