10 10
11本頁涵蓋[在開發容器中安裝 Claude Code](#add-claude-code-to-your-dev-container),然後是一組獨立的配置主題:在重新構建時保持身份驗證、強制執行組織政策、限制網路出站流量,以及無需權限提示即可執行。請閱讀與您的設定相符的主題。11本頁涵蓋[在開發容器中安裝 Claude Code](#add-claude-code-to-your-dev-container),然後是一組獨立的配置主題:在重新構建時保持身份驗證、強制執行組織政策、限制網路出站流量,以及無需權限提示即可執行。請閱讀與您的設定相符的主題。
12 12
13<Warning>13> [!WARNING]
14 雖然開發容器提供了大量保護,但沒有任何系統完全免疫所有攻擊。14>
15 當使用 `--dangerously-skip-permissions` 執行時,開發容器不會阻止惡意專案從容器內可存取的任何內容(包括儲存在 [`~/.claude`](/docs/zh-TW/claude-directory) 中的 Claude Code 認證)進行資料外洩。15> 雖然開發容器提供了大量保護,但沒有任何系統完全免疫所有攻擊。
16 僅在使用受信任的儲存庫進行開發時使用開發容器,並監控 Claude 的活動。16> 當使用 `--dangerously-skip-permissions` 執行時,開發容器不會阻止惡意專案從容器內可存取的任何內容(包括儲存在 [`~/.claude`](/docs/zh-TW/claude-directory) 中的 Claude Code 認證)進行資料外洩。
17 避免將主機祕密(例如 `~/.ssh` 或雲端認證檔案)掛載到容器中;優先使用儲存庫範圍或短期有效的令牌。17> 僅在使用受信任的儲存庫進行開發時使用開發容器,並監控 Claude 的活動。
18</Warning>18> 避免將主機祕密(例如 `~/.ssh` 或雲端認證檔案)掛載到容器中;優先使用儲存庫範圍或短期有效的令牌。
19 19
20<Accordion title="開發容器如何與您的編輯器配合使用">20> **開發容器如何與您的編輯器配合使用**
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>
22 22> 
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" />23>
24 24> 開發容器作為 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)不是此工作流程的一部分。25>
26 26> Claude Code 在容器內執行,因此它看到與您的專案工具鏈其餘部分相同的檔案、依賴項和工具。在 VS Code 中,您可以使用 [Claude Code 擴充功能面板](/docs/zh-TW/vs-code) 或在整合終端中執行 `claude`;兩者都在容器內執行並共享相同的 `~/.claude` 配置。
27 Claude Code 在容器內執行,因此它看到與您的專案工具鏈其餘部分相同的檔案、依賴項和工具。在 VS Code 中,您可以使用 [Claude Code 擴充功能面板](/docs/zh-TW/vs-code) 或在整合終端中執行 `claude`;兩者都在容器內執行並共享相同的 `~/.claude` 配置。27
28</Accordion>28## 在開發容器中新增 Claude Code
29
30<h2 id="add-claude-code-to-your-dev-container">
31 在開發容器中新增 Claude Code
32</h2>
33 29
34Claude Code 透過 [Claude Code Dev Container Feature](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code) 安裝到任何開發容器中。30Claude Code 透過 [Claude Code Dev Container Feature](https://github.com/anthropics/devcontainer-features/tree/main/src/claude-code) 安裝到任何開發容器中。
35 31
37 33
38當您在 VS Code 或 Codespaces 中開啟容器時,該功能還會新增 Claude Code VS Code 擴充功能;其他編輯器會忽略該部分。34當您在 VS Code 或 Codespaces 中開啟容器時,該功能還會新增 Claude Code VS Code 擴充功能;其他編輯器會忽略該部分。
39 35
40<Tip>36> [!TIP]
41 初次接觸開發容器?[VS Code Dev Containers 教程](https://code.visualstudio.com/docs/devcontainers/tutorial)會逐步介紹安裝 Docker、擴充功能和開啟您的第一個容器。如需更完整的強化示例(包含防火牆和持久磁碟區),請參閱[試用參考容器](#try-the-reference-container)。37>
42</Tip>38> 初次接觸開發容器?[VS Code Dev Containers 教程](https://code.visualstudio.com/docs/devcontainers/tutorial)會逐步介紹安裝 Docker、擴充功能和開啟您的第一個容器。如需更完整的強化示例(包含防火牆和持久磁碟區),請參閱[試用參考容器](#try-the-reference-container)。
39
40**1. 建立或更新 devcontainer.json**
43 41
44<Steps>42將以下內容儲存為儲存庫中的 `.devcontainer/devcontainer.json`,或將 `features` 區塊新增到您現有的檔案中。
45 <Step title="建立或更新 devcontainer.json">
46 將以下內容儲存為儲存庫中的 `.devcontainer/devcontainer.json`,或將 `features` 區塊新增到您現有的檔案中。
47 43
48 末尾的版本標籤(例如 `:1.0`)會固定功能的安裝指令碼,而不是 Claude Code 版本。該功能會安裝最新的 Claude Code,Claude Code 預設會在容器內自動更新。44末尾的版本標籤(例如 `:1.0`)會固定功能的安裝指令碼,而不是 Claude Code 版本。該功能會安裝最新的 Claude Code,Claude Code 預設會在容器內自動更新。
49 45
50 若要固定 CLI 版本或停用自動更新,請參閱[強制執行組織政策](#enforce-organization-policy)。46若要固定 CLI 版本或停用自動更新,請參閱[強制執行組織政策](#enforce-organization-policy)。
51 47
52 ```json .devcontainer/devcontainer.json theme={null}48```json .devcontainer/devcontainer.json theme={null}
53 {49{
54 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",50 "image": "mcr.microsoft.com/devcontainers/base:ubuntu",
55 "features": {51 "features": {
56 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}52 "ghcr.io/anthropics/devcontainer-features/claude-code:1.0": {}
57 }53 }
58 }54}
59 ```55```
56
57將 `image` 行替換為您的專案的基礎映像,或如果您現有的檔案使用 Dockerfile,則將其移除。
60 58
61 將 `image` 行替換為您的專案的基礎映像,或如果您現有的檔案使用 Dockerfile,則將其移除。59Claude Code 功能會在基礎映像未提供 Node.js 時自行安裝。如果該安裝失敗且構建停止並顯示 `Failed to install Node.js and npm`,請將 `"ghcr.io/devcontainers/features/node:1": {}` 新增到上述 `features` 區塊中 Claude Code 功能的上方,然後重新構建。
62 60
63 Claude Code 功能會在基礎映像未提供 Node.js 時自行安裝。如果該安裝失敗且構建停止並顯示 `Failed to install Node.js and npm`,請將 `"ghcr.io/devcontainers/features/node:1": {}` 新增到上述 `features` 區塊中 Claude Code 功能的上方,然後重新構建。61**2. 重新構建容器**
64 </Step>
65 62
66 <Step title="重新構建容器">63在 Mac 上使用 `Cmd+Shift+P` 或在 Windows 和 Linux 上使用 `Ctrl+Shift+P` 開啟 VS Code 命令面板,並執行 **Dev Containers: Rebuild Container**。
67 在 Mac 上使用 `Cmd+Shift+P` 或在 Windows 和 Linux 上使用 `Ctrl+Shift+P` 開啟 VS Code 命令面板,並執行 **Dev Containers: Rebuild Container**。
68 64
69 對於其他工具,請遵循該工具的重新構建操作:請參閱 [GitHub Codespaces 中的重新構建](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace)、[Dev Containers CLI](https://github.com/devcontainers/cli) 或您的 IDE 的開發容器文件。65對於其他工具,請遵循該工具的重新構建操作:請參閱 [GitHub Codespaces 中的重新構建](https://docs.github.com/en/codespaces/developing-in-a-codespace/rebuilding-the-container-in-a-codespace)、[Dev Containers CLI](https://github.com/devcontainers/cli) 或您的 IDE 的開發容器文件。
70 </Step>
71 66
72 <Step title="登入 Claude Code">67**3. 登入 Claude Code**
73 在重新構建的容器中開啟終端並執行 `claude`,然後按照身份驗證提示進行操作。68
74 </Step>69在重新構建的容器中開啟終端並執行 `claude`,然後按照身份驗證提示進行操作。
75</Steps>
76 70
77您在身份驗證提示中看到的內容取決於您的提供者:71您在身份驗證提示中看到的內容取決於您的提供者:
78 72
83 77
84請參閱[選擇您的 API 提供者](/docs/zh-TW/admin-setup#choose-your-api-provider)以決定哪條路徑適合您的組織。78請參閱[選擇您的 API 提供者](/docs/zh-TW/admin-setup#choose-your-api-provider)以決定哪條路徑適合您的組織。
85 79
86<Note>80> [!NOTE]
87 如果瀏覽器登入完成但回調從未到達容器,請複製瀏覽器中顯示的代碼,並將其貼上到終端中的 `Paste code here if prompted` 提示處。當編輯器的連接埠轉發不會路由 localhost 回調時,可能會發生這種情況。81>
88</Note>82> 如果瀏覽器登入完成但回調從未到達容器,請複製瀏覽器中顯示的代碼,並將其貼上到終端中的 `Paste code here if prompted` 提示處。當編輯器的連接埠轉發不會路由 localhost 回調時,可能會發生這種情況。
89 83
90<h2 id="persist-authentication-and-settings-across-rebuilds">84## 在重新構建時保持身份驗證和設定
91 在重新構建時保持身份驗證和設定
92</h2>
93 85
94預設情況下,容器的主目錄在重新構建時會被丟棄,因此工程師必須每次都重新登入。Claude Code 將其身份驗證令牌、使用者設定和工作階段歷史記錄儲存在 [`~/.claude`](/docs/zh-TW/claude-directory) 目錄下。它將您的 OAuth 帳戶、個人 MCP 伺服器和每個專案的信任設定儲存在 [`~/.claude.json`](/docs/zh-TW/settings-reference#global-config-settings) 中,這是位於該目錄外的單獨檔案,因此僅在 `~/.claude` 掛載一個磁碟區不足以讓您保持登入狀態。在 `~/.claude` 掛載一個命名磁碟區,並將 [`CLAUDE_CONFIG_DIR`](/docs/zh-TW/env-vars) 設定為相同路徑,以便 Claude Code 在磁碟區內寫入 `.claude.json`。86預設情況下,容器的主目錄在重新構建時會被丟棄,因此工程師必須每次都重新登入。Claude Code 將其身份驗證令牌、使用者設定和工作階段歷史記錄儲存在 [`~/.claude`](/docs/zh-TW/claude-directory) 目錄下。它將您的 OAuth 帳戶、個人 MCP 伺服器和每個專案的信任設定儲存在 [`~/.claude.json`](/docs/zh-TW/settings-reference#global-config-settings) 中,這是位於該目錄外的單獨檔案,因此僅在 `~/.claude` 掛載一個磁碟區不足以讓您保持登入狀態。在 `~/.claude` 掛載一個命名磁碟區,並將 [`CLAUDE_CONFIG_DIR`](/docs/zh-TW/env-vars) 設定為相同路徑,以便 Claude Code 在磁碟區內寫入 `.claude.json`。
95 87
112 104
113若要在 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 會自動將祕密作為環境變數提供給容器內。105若要在 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 會自動將祕密作為環境變數提供給容器內。
114 106
115<h2 id="enforce-organization-policy">107## 強制執行組織政策
116 強制執行組織政策
117</h2>
118 108
119開發容器是應用組織政策的便利場所,因為相同的映像和配置在每位工程師的機器上執行。109開發容器是應用組織政策的便利場所,因為相同的映像和配置在每位工程師的機器上執行。
120 110
144 134
145若要在容器內提供 [MCP 伺服器](/docs/zh-TW/mcp),請在儲存庫根目錄的 `.mcp.json` 檔案中以[專案範圍](/docs/zh-TW/mcp#mcp-installation-scopes)定義它們,以便它們與您的開發容器配置一起簽入。在您的 Dockerfile 中安裝本地 stdio 伺服器所依賴的任何二進位檔案,並將遠端伺服器網域新增到您的網路允許清單。135若要在容器內提供 [MCP 伺服器](/docs/zh-TW/mcp),請在儲存庫根目錄的 `.mcp.json` 檔案中以[專案範圍](/docs/zh-TW/mcp#mcp-installation-scopes)定義它們,以便它們與您的開發容器配置一起簽入。在您的 Dockerfile 中安裝本地 stdio 伺服器所依賴的任何二進位檔案,並將遠端伺服器網域新增到您的網路允許清單。
146 136
147<h2 id="restrict-network-egress">137## 限制網路出站流量
148 限制網路出站流量
149</h2>
150 138
151您可以將容器的出站流量限制為僅 Claude Code 需要的網域。請參閱[網路存取要求](/docs/zh-TW/network-config#network-access-requirements)以了解推理和身份驗證網域,以及[遙測服務](/docs/zh-TW/data-usage#telemetry-services)以了解可選的遙測和錯誤報告連接以及如何停用它們。139您可以將容器的出站流量限制為僅 Claude Code 需要的網域。請參閱[網路存取要求](/docs/zh-TW/network-config#network-access-requirements)以了解推理和身份驗證網域,以及[遙測服務](/docs/zh-TW/data-usage#telemetry-services)以了解可選的遙測和錯誤報告連接以及如何停用它們。
152 140
153參考容器包含一個 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 指令碼,該指令碼會限制出站流量僅限於指令碼允許的目的地。在容器內執行防火牆需要額外的權限,因此參考透過 `runArgs` 新增 `NET_ADMIN` 和 `NET_RAW` 功能。防火牆指令碼和這些功能對 Claude Code 本身不是必需的:您可以將它們省略並改為依賴您自己的網路控制。141參考容器包含一個 [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) 指令碼,該指令碼會限制出站流量僅限於指令碼允許的目的地。在容器內執行防火牆需要額外的權限,因此參考透過 `runArgs` 新增 `NET_ADMIN` 和 `NET_RAW` 功能。防火牆指令碼和這些功能對 Claude Code 本身不是必需的:您可以將它們省略並改為依賴您自己的網路控制。
154 142
155<h2 id="run-without-permission-prompts">143## 無需權限提示即可執行
156 無需權限提示即可執行
157</h2>
158 144
159因為容器以非 root 使用者身份執行 Claude Code 並將命令執行限制在容器內,您可以傳遞 `--dangerously-skip-permissions` 以進行無人值守操作。當以 root 身份啟動時,CLI 會拒絕此標誌,因此請確認 `remoteUser` 設定為非 root 帳戶。145因為容器以非 root 使用者身份執行 Claude Code 並將命令執行限制在容器內,您可以傳遞 `--dangerously-skip-permissions` 以進行無人值守操作。當以 root 身份啟動時,CLI 會拒絕此標誌,因此請確認 `remoteUser` 設定為非 root 帳戶。
160 146
162 148
163如果您想要更少的提示而不停用安全檢查,請考慮改為[自動模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),該模式具有在執行前審查操作的分類器。若要完全防止工程師使用 `--dangerously-skip-permissions`,請在[託管設定](/docs/zh-TW/settings-reference#permission-settings)中將 `permissions.disableBypassPermissionsMode` 設定為 `"disable"`。149如果您想要更少的提示而不停用安全檢查,請考慮改為[自動模式](/docs/zh-TW/permission-modes#eliminate-prompts-with-auto-mode),該模式具有在執行前審查操作的分類器。若要完全防止工程師使用 `--dangerously-skip-permissions`,請在[託管設定](/docs/zh-TW/settings-reference#permission-settings)中將 `permissions.disableBypassPermissionsMode` 設定為 `"disable"`。
164 150
165<h2 id="try-the-reference-container">151## 試用參考容器
166 試用參考容器
167</h2>
168 152
169[`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) 儲存庫包含一個示例開發容器,該容器結合了 CLI、出站防火牆、持久磁碟區和基於 Zsh 的 shell。它作為工作示例而不是維護的基礎映像提供;在將它們應用到您自己的配置之前,使用它來查看這些部分如何組合在一起。153[`anthropics/claude-code`](https://github.com/anthropics/claude-code/tree/main/.devcontainer) 儲存庫包含一個示例開發容器,該容器結合了 CLI、出站防火牆、持久磁碟區和基於 Zsh 的 shell。它作為工作示例而不是維護的基礎映像提供;在將它們應用到您自己的配置之前,使用它來查看這些部分如何組合在一起。
170 154
171<Steps>155**1. 安裝先決條件**
172 <Step title="安裝先決條件">156
173 安裝 VS Code 和 [Dev Containers 擴充功能](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)。157安裝 VS Code 和 [Dev Containers 擴充功能](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers)。
174 </Step>158
159**2. 複製參考**
160
161複製 [Claude Code 儲存庫](https://github.com/anthropics/claude-code)並在 VS Code 中開啟它。
162
163**3. 在容器中重新開啟**
175 164
176 <Step title="複製參考">165出現提示時,點擊 **Reopen in Container**,或從命令面板執行 **Dev Containers: Reopen in Container**。
177 複製 [Claude Code 儲存庫](https://github.com/anthropics/claude-code)並在 VS Code 中開啟它。
178 </Step>
179 166
180 <Step title="在容器中重新開啟">167**4. 啟動 Claude Code**
181 出現提示時,點擊 **Reopen in Container**,或從命令面板執行 **Dev Containers: Reopen in Container**。
182 </Step>
183 168
184 <Step title="啟動 Claude Code">169容器完成構建後,使用 `` Ctrl+` `` 開啟終端並執行 `claude` 以登入並啟動您的第一個工作階段。
185 容器完成構建後,使用 `` Ctrl+` `` 開啟終端並執行 `claude` 以登入並啟動您的第一個工作階段。
186 </Step>
187</Steps>
188 170
189若要將此配置用於您自己的專案,請將 `.devcontainer/` 目錄複製到您的儲存庫中並根據您的工具鏈調整 Dockerfile,或返回[在開發容器中新增 Claude Code](#add-claude-code-to-your-dev-container) 以僅將功能新增到您已有的設定中。171若要將此配置用於您自己的專案,請將 `.devcontainer/` 目錄複製到您的儲存庫中並根據您的工具鏈調整 Dockerfile,或返回[在開發容器中新增 Claude Code](#add-claude-code-to-your-dev-container) 以僅將功能新增到您已有的設定中。
190 172
196| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | 基礎映像、開發工具和 Claude Code 安裝 |178| [`Dockerfile`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/Dockerfile) | 基礎映像、開發工具和 Claude Code 安裝 |
197| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | 阻止除允許的網域外的所有出站網路流量 |179| [`init-firewall.sh`](https://github.com/anthropics/claude-code/blob/main/.devcontainer/init-firewall.sh) | 阻止除允許的網域外的所有出站網路流量 |
198 180
199<h2 id="next-steps">181## 後續步驟
200 後續步驟
201</h2>
202 182
203Claude Code 在您的開發容器中執行後,下面的頁面涵蓋組織推出的其餘部分:選擇身份驗證路徑、在儲存庫外提供託管政策、監控使用情況以及了解 Claude Code 儲存和傳送的內容。183Claude Code 在您的開發容器中執行後,下面的頁面涵蓋組織推出的其餘部分:選擇身份驗證路徑、在儲存庫外提供託管政策、監控使用情況以及了解 Claude Code 儲存和傳送的內容。
204 184