12 12
13<Warning>13<Warning>
14 虽然开发容器提供了实质性的保护,但没有任何系统能够完全免疫所有攻击。14 虽然开发容器提供了实质性的保护,但没有任何系统能够完全免疫所有攻击。
15 当使用 `--dangerously-skip-permissions` 执行时,开发容器不会阻止恶意项目泄露容器内可访问的任何内容,包括存储在 [`~/.claude`](/zh-CN/claude-directory) 中的 Claude Code 凭证。15 当使用 `--dangerously-skip-permissions` 执行时,开发容器不会阻止恶意项目泄露容器内可访问的任何内容,包括存储在 [`~/.claude`](/docs/zh-CN/claude-directory) 中的 Claude Code 凭证。
16 仅在使用受信任的存储库进行开发时使用开发容器,并监控 Claude 的活动。16 仅在使用受信任的存储库进行开发时使用开发容器,并监控 Claude 的活动。
17 避免将主机密钥(如 `~/.ssh` 或云凭证文件)挂载到容器中;优先使用存储库范围或短期令牌。17 避免将主机密钥(如 `~/.ssh` 或云凭证文件)挂载到容器中;优先使用存储库范围或短期令牌。
18</Warning>18</Warning>
20<Accordion title="开发容器如何与您的编辑器配合工作">20<Accordion title="开发容器如何与您的编辑器配合工作">
21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture.svg" />21 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=9017b1d16a446c6cc37ba562f35b9aae" className="dark:hidden" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture.svg" />
22 22
23 <img src="https://mintcdn.com/claude-code/YvJyjZfd9yMihr0i/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=YvJyjZfd9yMihr0i&q=85&s=ef00c8e25b1ea7a3a152895f1488831b" className="hidden dark:block" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />23 <img src="https://mintcdn.com/claude-code/_xqph1dUOslCOwsj/images/devcontainer-architecture-dark.svg?fit=max&auto=format&n=_xqph1dUOslCOwsj&q=85&s=a0a340b1f2afc6a590696102c8acaaca" className="hidden dark:block" alt="显示主机上的编辑器连接到 Docker 开发容器的图表。Claude Code、终端和构建工具在容器内运行。主机存储库绑定挂载到容器中作为工作区。" width="640" height="300" data-path="images/devcontainer-architecture-dark.svg" />
24 24
25 开发容器作为 Docker 容器运行,可以在您的机器上或云主机(如 GitHub Codespaces)上运行。支持 Dev Containers 规范的编辑器(如 VS Code、GitHub Codespaces、JetBrains IDE 或 Cursor)连接到该容器:您可以像往常一样在编辑器中浏览和编辑文件,但集成终端、语言服务器和构建工具都在容器内运行,而不是在主机上。不支持开发容器的编辑器(如纯 Vim)不属于此工作流。25 开发容器作为 Docker 容器运行,可以在您的机器上或云主机(如 GitHub Codespaces)上运行。支持 Dev Containers 规范的编辑器(如 VS Code、GitHub Codespaces、JetBrains IDE 或 Cursor)连接到该容器:您可以像往常一样在编辑器中浏览和编辑文件,但集成终端、语言服务器和构建工具都在容器内运行,而不是在主机上。不支持开发容器的编辑器(如纯 Vim)不属于此工作流。
26 26
27 Claude Code 在容器内运行,因此它看到与项目工具链其余部分相同的文件、依赖项和工具。在 VS Code 中,您可以使用 [Claude Code 扩展面板](/zh-CN/vs-code) 或在集成终端中运行 `claude`;两者都在容器内运行并共享相同的 `~/.claude` 配置。27 Claude Code 在容器内运行,因此它看到与项目工具链其余部分相同的文件、依赖项和工具。在 VS Code 中,您可以使用 [Claude Code 扩展面板](/docs/zh-CN/vs-code) 或在集成终端中运行 `claude`;两者都在容器内运行并共享相同的 `~/.claude` 配置。
28</Accordion>28</Accordion>
29 29
30<h2 id="add-claude-code-to-your-dev-container">30<h2 id="add-claude-code-to-your-dev-container">
75您在身份验证提示处看到的内容取决于您的提供商:75您在身份验证提示处看到的内容取决于您的提供商:
76 76
77* **Anthropic**:通过浏览器使用您的 Claude 或 Anthropic Console 账户登录77* **Anthropic**:通过浏览器使用您的 Claude 或 Anthropic Console 账户登录
78* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/zh-CN/third-party-integrations)**:Claude Code 使用您的云提供商凭证,无需浏览器提示78* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/docs/zh-CN/third-party-integrations)**:Claude Code 使用您的云提供商凭证,无需浏览器提示
79 79
80对于云提供商,通过 `containerEnv`、Codespaces 密钥或您的云的工作负载身份将凭证传递到容器中,而不是从主机挂载凭证文件。有关凭证链的详细信息,请参阅 [Amazon Bedrock](/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/zh-CN/microsoft-foundry),Claude Code 会读取这些信息。80对于云提供商,通过 `containerEnv`、Codespaces 密钥或您的云的工作负载身份将凭证传递到容器中,而不是从主机挂载凭证文件。有关凭证链的详细信息,请参阅 [Amazon Bedrock](/docs/zh-CN/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-CN/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-CN/microsoft-foundry),Claude Code 会读取这些信息。
81 81
82请参阅[选择您的 API 提供商](/zh-CN/admin-setup#choose-your-api-provider)以决定哪条路径适合您的组织。82请参阅[选择您的 API 提供商](/docs/zh-CN/admin-setup#choose-your-api-provider)以决定哪条路径适合您的组织。
83 83
84<Note>84<Note>
85 如果浏览器登录完成但回调从未到达容器,请复制浏览器中显示的代码并将其粘贴到终端中的 `Paste code here if prompted` 提示处。当编辑器的端口转发不路由 localhost 回调时,可能会发生这种情况。85 如果浏览器登录完成但回调从未到达容器,请复制浏览器中显示的代码并将其粘贴到终端中的 `Paste code here if prompted` 提示处。当编辑器的端口转发不路由 localhost 回调时,可能会发生这种情况。
89 在重建过程中保持身份验证和设置89 在重建过程中保持身份验证和设置
90</h2>90</h2>
91 91
92默认情况下,容器的主目录在重建时会被丢弃,因此工程师必须每次都重新登录。Claude Code 将其身份验证令牌、用户设置和会话历史存储在 [`~/.claude`](/zh-CN/claude-directory) 下。在该路径挂载一个命名卷以在重建过程中保持此状态。92默认情况下,容器的主目录在重建时会被丢弃,因此工程师必须每次都重新登录。Claude Code 将其身份验证令牌、用户设置和会话历史存储在 [`~/.claude`](/docs/zh-CN/claude-directory) 下。在该路径挂载一个命名卷以在重建过程中保持此状态。
93 93
94以下示例在 `node` 用户的主目录处挂载一个卷:94以下示例在 `node` 用户的主目录处挂载一个卷:
95 95
99]99]
100```100```
101 101
102将 `/home/node` 替换为容器的 `remoteUser` 的主目录。如果您在 `~/.claude` 以外的位置挂载卷,请设置 [`CLAUDE_CONFIG_DIR`](/zh-CN/env-vars) 为挂载路径,以便 Claude Code 在那里读取和写入。102将 `/home/node` 替换为容器的 `remoteUser` 的主目录。如果您在 `~/.claude` 以外的位置挂载卷,请设置 [`CLAUDE_CONFIG_DIR`](/docs/zh-CN/env-vars) 为挂载路径,以便 Claude Code 在那里读取和写入。
103 103
104要按项目隔离状态而不是在所有存储库中共享一个卷,请在源名称中包含 `${devcontainerId}` 变量。[参考配置](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) 为此目的使用 `source=claude-code-config-${devcontainerId}`。104要按项目隔离状态而不是在所有存储库中共享一个卷,请在源名称中包含 `${devcontainerId}` 变量。[参考配置](https://github.com/anthropics/claude-code/blob/main/.devcontainer/devcontainer.json) 为此目的使用 `source=claude-code-config-${devcontainerId}`。
105 105
106在 GitHub Codespaces 中,`~/.claude` 在停止和启动 codespace 时会保持,但在重建容器时仍会被清除,因此上面的卷挂载也适用于此。要在 codespace 之间进行身份验证,请将 `ANTHROPIC_API_KEY` 或来自 [`claude setup-token`](/zh-CN/authentication#generate-a-long-lived-token) 的 `CLAUDE_CODE_OAUTH_TOKEN` 存储为 [Codespaces 密钥](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces);Codespaces 会自动将密钥作为环境变量提供给容器内部。106在 GitHub Codespaces 中,`~/.claude` 在停止和启动 codespace 时会保持,但在重建容器时仍会被清除,因此上面的卷挂载也适用于此。要在 codespace 之间进行身份验证,请将 `ANTHROPIC_API_KEY` 或来自 [`claude setup-token`](/docs/zh-CN/authentication#generate-a-long-lived-token) 的 `CLAUDE_CODE_OAUTH_TOKEN` 存储为 [Codespaces 密钥](https://docs.github.com/en/codespaces/managing-your-codespaces/managing-your-account-specific-secrets-for-github-codespaces);Codespaces 会自动将密钥作为环境变量提供给容器内部。
107 107
108<h2 id="enforce-organization-policy">108<h2 id="enforce-organization-policy">
109 强制执行组织策略109 强制执行组织策略
111 111
112开发容器是应用组织策略的便利场所,因为相同的镜像和配置在每个工程师的机器上运行。112开发容器是应用组织策略的便利场所,因为相同的镜像和配置在每个工程师的机器上运行。
113 113
114Claude Code 在 Linux 上读取 `/etc/claude-code/managed-settings.json` 并在[设置层次结构](/zh-CN/settings#how-scopes-interact)中以最高优先级应用它,因此那里的值会覆盖工程师在 `~/.claude` 或项目的 `.claude/` 目录中设置的任何内容。从您的 Dockerfile 复制文件到位:114Claude Code 在 Linux 上读取 `/etc/claude-code/managed-settings.json` 并在[设置层次结构](/docs/zh-CN/settings#how-scopes-interact)中以最高优先级应用它,因此那里的值会覆盖工程师在 `~/.claude` 或项目的 `.claude/` 目录中设置的任何内容。从您的 Dockerfile 复制文件到位:
115 115
116```dockerfile Dockerfile theme={null}116```dockerfile Dockerfile theme={null}
117RUN mkdir -p /etc/claude-code117RUN mkdir -p /etc/claude-code
118COPY managed-settings.json /etc/claude-code/managed-settings.json118COPY managed-settings.json /etc/claude-code/managed-settings.json
119```119```
120 120
121因为 Dockerfile 存在于存储库中,任何具有写入权限的人都可以更改或删除此步骤。对于工程师无法通过编辑存储库文件来绕过的策略,请通过[服务器管理的设置](/zh-CN/server-managed-settings)或您的 MDM 提供托管设置。有关可用的键和其他交付路径,请参阅[托管设置文件](/zh-CN/settings#settings-files)。121因为 Dockerfile 存在于存储库中,任何具有写入权限的人都可以更改或删除此步骤。对于工程师无法通过编辑存储库文件来绕过的策略,请通过[服务器管理的设置](/docs/zh-CN/server-managed-settings)或您的 MDM 提供托管设置。有关可用的键和其他交付路径,请参阅[托管设置文件](/docs/zh-CN/settings#settings-files)。
122 122
123要设置适用于容器中每个 Claude Code 会话的[环境变量](/zh-CN/env-vars),请将它们添加到 `devcontainer.json` 中的 `containerEnv`。以下示例选择退出遥测和错误报告,并防止 Claude Code 在安装后自动更新:123要设置适用于容器中每个 Claude Code 会话的[环境变量](/docs/zh-CN/env-vars),请将它们添加到 `devcontainer.json` 中的 `containerEnv`。以下示例选择退出遥测和错误报告,并防止 Claude Code 在安装后自动更新:
124 124
125```json devcontainer.json theme={null}125```json devcontainer.json theme={null}
126"containerEnv": {126"containerEnv": {
131 131
132Dev Container Feature 始终安装最新的 Claude Code 版本。要为可重现的构建固定特定的 Claude Code 版本,请从您的 Dockerfile 使用 `npm install -g @anthropic-ai/claude-code@X.Y.Z` 安装它,而不是使用该功能,并设置 `DISABLE_AUTOUPDATER`,如上所示。132Dev Container Feature 始终安装最新的 Claude Code 版本。要为可重现的构建固定特定的 Claude Code 版本,请从您的 Dockerfile 使用 `npm install -g @anthropic-ai/claude-code@X.Y.Z` 安装它,而不是使用该功能,并设置 `DISABLE_AUTOUPDATER`,如上所示。
133 133
134有关完整的策略控制列表,包括权限规则、工具限制和 MCP 服务器允许列表,请参阅[为您的组织设置 Claude Code](/zh-CN/admin-setup)。134有关完整的策略控制列表,包括权限规则、工具限制和 MCP 服务器允许列表,请参阅[为您的组织设置 Claude Code](/docs/zh-CN/admin-setup)。
135 135
136要在容器内提供 [MCP 服务器](/zh-CN/mcp),请在存储库根目录的 `.mcp.json` 文件中的[项目范围](/zh-CN/mcp#mcp-installation-scopes)定义它们,以便它们与您的开发容器配置一起签入。在您的 Dockerfile 中安装本地 stdio 服务器依赖的任何二进制文件,并将远程服务器域添加到您的网络允许列表。136要在容器内提供 [MCP 服务器](/docs/zh-CN/mcp),请在存储库根目录的 `.mcp.json` 文件中的[项目范围](/docs/zh-CN/mcp#mcp-installation-scopes)定义它们,以便它们与您的开发容器配置一起签入。在您的 Dockerfile 中安装本地 stdio 服务器依赖的任何二进制文件,并将远程服务器域添加到您的网络允许列表。
137 137
138<h2 id="restrict-network-egress">138<h2 id="restrict-network-egress">
139 限制网络出站流量139 限制网络出站流量
140</h2>140</h2>
141 141
142您可以将容器的出站流量限制为仅 Claude Code 需要的域。有关推理和身份验证域,请参阅[网络访问要求](/zh-CN/network-config#network-access-requirements),有关可选的遥测和错误报告连接以及如何禁用它们,请参阅[遥测服务](/zh-CN/data-usage#telemetry-services)。142您可以将容器的出站流量限制为仅 Claude Code 需要的域。有关推理和身份验证域,请参阅[网络访问要求](/docs/zh-CN/network-config#network-access-requirements),有关可选的遥测和错误报告连接以及如何禁用它们,请参阅[遥测服务](/docs/zh-CN/data-usage#telemetry-services)。
143 143
144参考容器包含一个 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 脚本,该脚本阻止除 Claude Code 和您的开发工具需要的域之外的所有出站流量。在容器内运行防火墙需要额外的权限,因此参考通过 `runArgs` 添加 `NET_ADMIN` 和 `NET_RAW` 功能。防火墙脚本和这些功能对于 Claude Code 本身不是必需的:您可以将其省略并改为依赖您自己的网络控制。144参考容器包含一个 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 脚本,该脚本阻止除 Claude Code 和您的开发工具需要的域之外的所有出站流量。在容器内运行防火墙需要额外的权限,因此参考通过 `runArgs` 添加 `NET_ADMIN` 和 `NET_RAW` 功能。防火墙脚本和这些功能对于 Claude Code 本身不是必需的:您可以将其省略并改为依赖您自己的网络控制。
145 145
151 151
152跳过权限提示会移除您在工具调用运行前审查它们的机会。Claude 仍然可以修改绑定挂载的工作区中的任何文件(这直接显示在您的主机上),并访问容器的网络策略允许的任何内容。将此标志与上面的[网络出站流量限制](#restrict-network-egress)配对,以限制绕过的会话可以访问的内容。152跳过权限提示会移除您在工具调用运行前审查它们的机会。Claude 仍然可以修改绑定挂载的工作区中的任何文件(这直接显示在您的主机上),并访问容器的网络策略允许的任何内容。将此标志与上面的[网络出站流量限制](#restrict-network-egress)配对,以限制绕过的会话可以访问的内容。
153 153
154如果您想要更少的提示而不禁用安全检查,请考虑改为[自动模式](/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),它有一个分类器在运行前审查操作。要完全防止工程师使用 `--dangerously-skip-permissions`,请在[托管设置](/zh-CN/settings#permission-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"`。154如果您想要更少的提示而不禁用安全检查,请考虑改为[自动模式](/docs/zh-CN/permission-modes#eliminate-prompts-with-auto-mode),它有一个分类器在运行前审查操作。要完全防止工程师使用 `--dangerously-skip-permissions`,请在[托管设置](/docs/zh-CN/settings#permission-settings)中将 `permissions.disableBypassPermissionsMode` 设置为 `"disable"`。
155 155
156<h2 id="try-the-reference-container">156<h2 id="try-the-reference-container">
157 尝试参考容器157 尝试参考容器
193 193
194Claude Code 在您的开发容器中运行后,下面的页面涵盖了组织推出的其余部分:选择身份验证路径、在存储库外交付托管策略、监控使用情况以及了解 Claude Code 存储和发送的内容。194Claude Code 在您的开发容器中运行后,下面的页面涵盖了组织推出的其余部分:选择身份验证路径、在存储库外交付托管策略、监控使用情况以及了解 Claude Code 存储和发送的内容。
195 195
196* [为您的组织设置 Claude Code](/zh-CN/admin-setup):选择身份验证提供商、决定策略如何到达设备以及规划推出196* [为您的组织设置 Claude Code](/docs/zh-CN/admin-setup):选择身份验证提供商、决定策略如何到达设备以及规划推出
197* [服务器管理的设置](/zh-CN/server-managed-settings):从 Claude.ai 管理控制台交付托管策略,以便工程师无法通过编辑存储库文件来绕过它197* [服务器管理的设置](/docs/zh-CN/server-managed-settings):从 Claude.ai 管理控制台交付托管策略,以便工程师无法通过编辑存储库文件来绕过它
198* [监控使用情况和审计活动](/zh-CN/monitoring-usage):导出 OpenTelemetry 指标并查看您的团队正在运行的内容198* [监控使用情况和审计活动](/docs/zh-CN/monitoring-usage):导出 OpenTelemetry 指标并查看您的团队正在运行的内容
199* [网络访问要求](/zh-CN/network-config#network-access-requirements):代理和防火墙的完整域允许列表199* [网络访问要求](/docs/zh-CN/network-config#network-access-requirements):代理和防火墙的完整域允许列表
200* [遥测服务和选择退出](/zh-CN/data-usage#telemetry-services):Claude Code 默认发送的内容以及禁用它的环境变量200* [遥测服务和选择退出](/docs/zh-CN/data-usage#telemetry-services):Claude Code 默认发送的内容以及禁用它的环境变量
201* [探索 `.claude` 目录](/zh-CN/claude-directory):卷挂载包含的内容,包括凭证、设置和会话历史201* [探索 `.claude` 目录](/docs/zh-CN/claude-directory):卷挂载包含的内容,包括凭证、设置和会话历史
202* [沙箱环境](/zh-CN/sandbox-environments):比较开发容器与内置 Bash 沙箱、自定义容器和虚拟机202* [沙箱环境](/docs/zh-CN/sandbox-environments):比较开发容器与内置 Bash 沙箱、自定义容器和虚拟机
203* [安全模型](/zh-CN/security):Claude Code 的权限系统、沙箱和提示注入保护如何组合在一起203* [安全模型](/docs/zh-CN/security):Claude Code 的权限系统、沙箱和提示注入保护如何组合在一起
204* [权限模式](/zh-CN/permission-modes):从计划模式到自动模式再到绕过的完整范围,以及何时使用每种模式204* [权限模式](/docs/zh-CN/permission-modes):从计划模式到自动模式再到绕过的完整范围,以及何时使用每种模式