devcontainer.md +25 −25
12 12
13<Warning>13<Warning>
14 雖然開發容器提供了大量保護,但沒有任何系統完全免疫所有攻擊。14 雖然開發容器提供了大量保護,但沒有任何系統完全免疫所有攻擊。
1515 當使用 `--dangerously-skip-permissions` 執行時,開發容器不會阻止惡意專案從容器內可存取的任何內容(包括儲存在 [`~/.claude`](/zh-TW/claude-directory) 中的 Claude Code 認證)進行資料外洩。 當使用 `--dangerously-skip-permissions` 執行時,開發容器不會阻止惡意專案從容器內可存取的任何內容(包括儲存在 [`~/.claude`](/docs/zh-TW/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
2323 <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" /> <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
2727 Claude Code 在容器內執行,因此它看到與您的專案工具鏈其餘部分相同的檔案、依賴項和工具。在 VS Code 中,您可以使用 [Claude Code 擴充功能面板](/zh-TW/vs-code) 或在整合終端中執行 `claude`;兩者都在容器內執行並共享相同的 `~/.claude` 配置。 Claude Code 在容器內執行,因此它看到與您的專案工具鏈其餘部分相同的檔案、依賴項和工具。在 VS Code 中,您可以使用 [Claude Code 擴充功能面板](/docs/zh-TW/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 帳戶登入
7878* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/zh-TW/third-party-integrations)**:Claude Code 使用您的雲端提供者認證,無需瀏覽器提示* **[Amazon Bedrock、Google Cloud 的 Agent Platform 或 Microsoft Foundry](/docs/zh-TW/third-party-integrations)**:Claude Code 使用您的雲端提供者認證,無需瀏覽器提示
79 79
8080對於雲端提供者,透過 `containerEnv`、Codespaces 祕密或您的雲端的工作負載身份(而不是從主機掛載認證檔案)將認證傳遞到容器中。請參閱 [Amazon Bedrock](/zh-TW/amazon-bedrock)、[Google Cloud 的 Agent Platform](/zh-TW/google-vertex-ai) 或 [Microsoft Foundry](/zh-TW/microsoft-foundry) 以了解 Claude Code 讀取的認證鏈。對於雲端提供者,透過 `containerEnv`、Codespaces 祕密或您的雲端的工作負載身份(而不是從主機掛載認證檔案)將認證傳遞到容器中。請參閱 [Amazon Bedrock](/docs/zh-TW/amazon-bedrock)、[Google Cloud 的 Agent Platform](/docs/zh-TW/google-vertex-ai) 或 [Microsoft Foundry](/docs/zh-TW/microsoft-foundry) 以了解 Claude Code 讀取的認證鏈。
81 81
8282請參閱[選擇您的 API 提供者](/zh-TW/admin-setup#choose-your-api-provider)以決定哪條路徑適合您的組織。請參閱[選擇您的 API 提供者](/docs/zh-TW/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
9292預設情況下,容器的主目錄在重新構建時會被丟棄,因此工程師必須每次都重新登入。Claude Code 將其身份驗證令牌、使用者設定和工作階段歷史記錄儲存在 [`~/.claude`](/zh-TW/claude-directory) 下。在該路徑掛載一個命名磁碟區以在重新構建時保持此狀態。預設情況下,容器的主目錄在重新構建時會被丟棄,因此工程師必須每次都重新登入。Claude Code 將其身份驗證令牌、使用者設定和工作階段歷史記錄儲存在 [`~/.claude`](/docs/zh-TW/claude-directory) 下。在該路徑掛載一個命名磁碟區以在重新構建時保持此狀態。
93 93
94以下示例在 `node` 使用者的主目錄掛載一個磁碟區:94以下示例在 `node` 使用者的主目錄掛載一個磁碟區:
95 95
99]99]
100```100```
101 101
102102將 `/home/node` 替換為您的容器的 `remoteUser` 的主目錄。如果您在 `~/.claude` 以外的位置掛載磁碟區,請設定 [`CLAUDE_CONFIG_DIR`](/zh-TW/env-vars) 為掛載路徑,以便 Claude Code 在那裡讀取和寫入。將 `/home/node` 替換為您的容器的 `remoteUser` 的主目錄。如果您在 `~/.claude` 以外的位置掛載磁碟區,請設定 [`CLAUDE_CONFIG_DIR`](/docs/zh-TW/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
106106在 GitHub Codespaces 中,`~/.claude` 在停止和啟動 codespace 時會保持,但在重新構建容器時仍會被清除,因此上面的磁碟區掛載也適用於此。若要在 codespace 之間進行身份驗證,請將 `ANTHROPIC_API_KEY` 或來自 [`claude setup-token`](/zh-TW/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 會自動將祕密作為環境變數提供給容器內。在 GitHub Codespaces 中,`~/.claude` 在停止和啟動 codespace 時會保持,但在重新構建容器時仍會被清除,因此上面的磁碟區掛載也適用於此。若要在 codespace 之間進行身份驗證,請將 `ANTHROPIC_API_KEY` 或來自 [`claude setup-token`](/docs/zh-TW/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
114114Claude Code 在 Linux 上讀取 `/etc/claude-code/managed-settings.json` 並在[設定層級結構](/zh-TW/settings#how-scopes-interact)中以最高優先級應用它,因此那裡的值會覆蓋工程師在 `~/.claude` 或專案的 `.claude/` 目錄中設定的任何內容。從您的 Dockerfile 複製檔案到位置:Claude Code 在 Linux 上讀取 `/etc/claude-code/managed-settings.json` 並在[設定層級結構](/docs/zh-TW/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
121121因為 Dockerfile 存在於儲存庫中,任何具有寫入存取權限的人都可以更改或移除此步驟。對於工程師無法透過編輯儲存庫檔案來繞過的政策,請透過[伺服器管理的設定](/zh-TW/server-managed-settings)或您的 MDM 提供託管設定。請參閱[託管設定檔案](/zh-TW/settings#settings-files)以了解可用的鍵和其他傳遞路徑。因為 Dockerfile 存在於儲存庫中,任何具有寫入存取權限的人都可以更改或移除此步驟。對於工程師無法透過編輯儲存庫檔案來繞過的政策,請透過[伺服器管理的設定](/docs/zh-TW/server-managed-settings)或您的 MDM 提供託管設定。請參閱[託管設定檔案](/docs/zh-TW/settings#settings-files)以了解可用的鍵和其他傳遞路徑。
122 122
123123若要設定適用於容器中每個 Claude Code 工作階段的[環境變數](/zh-TW/env-vars),請將它們新增到您的 `devcontainer.json` 中的 `containerEnv`。以下示例選擇退出遙測和錯誤報告,並防止 Claude Code 在安裝後自動更新:若要設定適用於容器中每個 Claude Code 工作階段的[環境變數](/docs/zh-TW/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
134134如需完整的政策控制清單(包括權限規則、工具限制和 MCP 伺服器允許清單),請參閱[為您的組織設定 Claude Code](/zh-TW/admin-setup)。如需完整的政策控制清單(包括權限規則、工具限制和 MCP 伺服器允許清單),請參閱[為您的組織設定 Claude Code](/docs/zh-TW/admin-setup)。
135 135
136136若要在容器內提供 [MCP 伺服器](/zh-TW/mcp),請在儲存庫根目錄的 `.mcp.json` 檔案中以[專案範圍](/zh-TW/mcp#mcp-installation-scopes)定義它們,以便它們與您的開發容器配置一起簽入。在您的 Dockerfile 中安裝本地 stdio 伺服器所依賴的任何二進位檔案,並將遠端伺服器網域新增到您的網路允許清單。若要在容器內提供 [MCP 伺服器](/docs/zh-TW/mcp),請在儲存庫根目錄的 `.mcp.json` 檔案中以[專案範圍](/docs/zh-TW/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
142142您可以將容器的出站流量限制為僅 Claude Code 需要的網域。請參閱[網路存取要求](/zh-TW/network-config#network-access-requirements)以了解推理和身份驗證網域,以及[遙測服務](/zh-TW/data-usage#telemetry-services)以了解可選的遙測和錯誤報告連接以及如何停用它們。您可以將容器的出站流量限制為僅 Claude Code 需要的網域。請參閱[網路存取要求](/docs/zh-TW/network-config#network-access-requirements)以了解推理和身份驗證網域,以及[遙測服務](/docs/zh-TW/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
154154如果您想要更少的提示而不停用安全檢查,請考慮改為[自動模式](/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),該模式具有在執行前審查操作的分類器。若要完全防止工程師使用 `--dangerously-skip-permissions`,請在[託管設定](/zh-TW/settings#permission-settings)中將 `permissions.disableBypassPermissionsMode` 設定為 `"disable"`。如果您想要更少的提示而不停用安全檢查,請考慮改為[自動模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),該模式具有在執行前審查操作的分類器。若要完全防止工程師使用 `--dangerously-skip-permissions`,請在[託管設定](/docs/zh-TW/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
196196* [為您的組織設定 Claude Code](/zh-TW/admin-setup):選擇身份驗證提供者、決定政策如何到達裝置以及規劃推出* [為您的組織設定 Claude Code](/docs/zh-TW/admin-setup):選擇身份驗證提供者、決定政策如何到達裝置以及規劃推出
197197* [伺服器管理的設定](/zh-TW/server-managed-settings):從 Claude.ai 管理員控制台提供託管政策,以便工程師無法透過編輯儲存庫檔案來繞過它* [伺服器管理的設定](/docs/zh-TW/server-managed-settings):從 Claude.ai 管理員控制台提供託管政策,以便工程師無法透過編輯儲存庫檔案來繞過它
198198* [監控使用情況和審計活動](/zh-TW/monitoring-usage):匯出 OpenTelemetry 指標並審查您的團隊正在執行的內容* [監控使用情況和審計活動](/docs/zh-TW/monitoring-usage):匯出 OpenTelemetry 指標並審查您的團隊正在執行的內容
199199* [網路存取要求](/zh-TW/network-config#network-access-requirements):代理和防火牆的完整網域允許清單* [網路存取要求](/docs/zh-TW/network-config#network-access-requirements):代理和防火牆的完整網域允許清單
200200* [遙測服務和選擇退出](/zh-TW/data-usage#telemetry-services):Claude Code 預設傳送的內容以及停用它的環境變數* [遙測服務和選擇退出](/docs/zh-TW/data-usage#telemetry-services):Claude Code 預設傳送的內容以及停用它的環境變數
201201* [探索 `.claude` 目錄](/zh-TW/claude-directory):磁碟區掛載包含的內容,包括認證、設定和工作階段歷史記錄* [探索 `.claude` 目錄](/docs/zh-TW/claude-directory):磁碟區掛載包含的內容,包括認證、設定和工作階段歷史記錄
202202* [沙箱環境](/zh-TW/sandbox-environments):比較開發容器與內建 Bash 沙箱、自訂容器和虛擬機器* [沙箱環境](/docs/zh-TW/sandbox-environments):比較開發容器與內建 Bash 沙箱、自訂容器和虛擬機器
203203* [安全模型](/zh-TW/security):Claude Code 的權限系統、沙箱和提示注入保護如何組合在一起* [安全模型](/docs/zh-TW/security):Claude Code 的權限系統、沙箱和提示注入保護如何組合在一起
204204* [Permission modes](/zh-TW/permission-modes):從 Plan Mode 到 auto mode 到 bypass 的完整範圍,以及何時使用每種模式* [Permission modes](/docs/zh-TW/permission-modes):從 Plan Mode 到 auto mode 到 bypass 的完整範圍,以及何時使用每種模式