跳到主要內容
maxstudioNews
AI 自動化DEV Community (Claude Code)約 12 分鐘

Claude Code 沙盒環境:內建隔離、Docker 與雲端部署實戰

本文介紹 Claude Code 的沙盒環境選項,確保 AI 代理執行時的安全性與隔離性。它涵蓋了內建的 shell 沙盒、用於可重複開發的 Docker 容器,以及適用於遠端或多代理任務的雲端工作區。這些選項有助於控制代理對檔案、程序和憑證的存取,確保開發環境的安全與效率。

Claude Code 沙盒環境:內建隔離、Docker 與雲端部署實戰
圖片來源:DEV Community (Claude Code)

Claude Code 的沙盒環境限制了代理在工作時可以存取的內容。您可以透過 /sandbox 啟用內建的 shell 沙盒,在 Docker 容器中執行 Claude Code,或者為其提供一個獨立的雲端機器。正確的選擇取決於會話所需的檔案、程序和憑證。

對於本地工作,請從內建沙盒開始。對於可重複的開發設定,請使用開發容器。對於遠端任務或多個代理同時工作,雲端沙盒為每個任務提供獨立的工作區。

內建的 Claude Code 沙盒保護了什麼?Claude Code 使用作業系統控制來限制其 shell 工具以及該工具啟動的程序。它在 macOS 上使用 Seatbelt,在 Linux 上使用 bubblewrap。沙盒可以限制對檔案的寫入,並透過允許網域的代理來限制網路存取。當您新增工具時,這個範圍就顯得非常重要。

Claude Code 的內建檔案工具、hook 和本地 MCP 伺服器都位於 shell 沙盒之外。要包含整個代理程序及其本地工具,請將它們在容器、虛擬機器或單獨配置的沙盒執行環境中執行。遠端 MCP 服務仍擁有您授予該服務的任何權限。請參閱 Claude Code 的沙盒文件。

以下是不同設定的內容與您仍需控制的項目:

內建 Claude Code 沙盒:包含 shell 指令及其子程序。您仍需控制檔案工具、hook、MCP 服務、可讀取路徑和允許的網域。

Docker 開發容器:包含容器內的程序和檔案。您仍需控制主機掛載、Docker socket 存取、權限和網路策略。

雲端工作區:包含獨立機器或執行環境上的代理程序。您仍需控制上傳資料、憑證、網路存取和工作區的實際隔離邊界。

啟用 Claude Code 沙盒模式:在 macOS 上,Claude Code 使用系統現有的沙盒支援。在 Linux 或 WSL2 上,請先安裝所需的套件。對於 Debian 或 Ubuntu 系統,請執行 sudo apt-get install bubblewrap socat。

在您的專案中啟動 Claude Code 並輸入 /sandbox。選擇適合您審查流程的模式。自動允許模式允許沙盒化的 shell 指令在沒有批准提示的情況下執行。常規權限則在 shell 沙盒保持活動狀態時,維持一般的批准流程。原生的 Windows 需要 WSL2 才能使用此沙盒。設定指南列出了平台要求和限制。

對於必須將 shell 指令保留在沙盒內的會話,請使用以下指令啟動 Claude Code:claude --settings '{"sandbox":{"enabled":true,"allowUnsandboxedCommands":false,"failIfUnavailable":true}}'。

其中 allowUnsandboxedCommands: false 會禁用指令逃逸沙盒的途徑,而 failIfUnavailable: true 則會在沙盒支援缺失時導致啟動失敗。同時也請檢查設定中任何被排除的指令。檔案讀取預設保持廣泛,如果會話不應看到機器上其他位置的檔案,請新增讀取限制。

在長時間執行前檢查邊界:請 Claude 透過其 shell 工具執行以下指令:touch ~/sandbox-probe 和 curl --noproxy '*' https://example.com。從您家目錄下的專案資料夾執行此測試。

在預期的限制下,第一個指令應該會失敗,因為它寫入了該專案之外。第二個指令測試指令是否可以繞過網路代理。當直接網路存取被阻擋時,它應該會失敗。透過代理允許的請求仍然可以成功。請讓 Claude 執行這些檢查。在單獨的終端機中手動輸入指令並不能測試代理的 shell 沙盒。

沙盒模式、自動模式與跳過權限:權限模式決定 Claude 何時請求批准。沙盒化控制作業系統允許指令執行的內容。Claude Code 的自動模式使用分類器來決定哪些動作可以繼續進行。這與 shell 沙盒的自動允許模式不同。在更改任何設定之前,請檢查權限模式。

--dangerously-skip-permissions 會繞過常規的權限提示。它不會建立容器、限制檔案存取或設定網路策略。明確的拒絕規則和某些檢查仍然可以適用。如果您將其用於無人值守的工作,請先配置並測試周圍的隔離環境。我們的 dangerously-skip-permissions 指南涵蓋了該工作流程。

在 Docker 中執行 Claude Code:開發容器為團隊提供相同的起始環境,並將代理的程序保留在容器內。安裝 Docker 並使用支援 Dev Containers 的編輯器。在您的專案中新增此檔案至 .devcontainer/devcontainer.json:

{ "image" : "mcr.microsoft.com/devcontainers/base:ubuntu" , "remoteUser" : "vscode" , "features" : { "ghcr.io/devcontainers/features/node:1" : { "version" : "22" }, "ghcr.io/anthropics/devcontainer-features/claude-code:1.0" : {} } }

在容器中開啟專案,讓它建置,然後在其終端機中執行 claude 並登入。此配置會安裝 Claude Code 和 Node.js 22。新增專案所需的任何其他執行環境和依賴項。功能版本不會固定它所安裝的 Claude Code 版本。

我們測試了此精確配置的全新建置。Claude 隨後修復了一個故意失敗的 Node.js 測試,並且獨立的 node --test 執行成功。明確包含 Node.js 功能很重要:我們第一次僅使用 Claude Code 功能的全新建置在安裝 Node.js 和 npm 時失敗了。在將工作交給代理之前,請檢查掛載。

可寫入的專案掛載允許它更改主機上的檔案。避免掛載您的家目錄、生產憑證或主機的 Docker socket。此最小配置不會新增網路允許清單。請參閱 Anthropic 的開發容器指南和 Docker 的安全文件,以了解您的設定所需的控制項。

Docker 容器與 Docker Sandboxes 的差異:Docker 也提供一個名為 Docker Sandboxes 的產品。其文件化的架構使用微型虛擬機器(microVMs)和隔離的 Docker daemon。普通的開發容器不會僅僅因為使用 Docker 就獲得這些特性。

工作區同步也取決於您選擇的 Docker Sandboxes 模式。在將這兩種設定視為等同之前,請閱讀其架構和安全模型。

雲端沙盒何時有幫助:當任務在您的筆記型電腦斷開連接後必須繼續執行、代理需要獨立的工作樹,或者您的應用程式為每個使用者建立一個工作區時,遠端工作區會有所幫助。您可以複製儲存庫、執行代理、檢查其更改並檢索您想要保留的檔案。

Lizard (lizard.build) 提供 Lizard Sandboxes,它支援 Firecracker 微型虛擬機器。傳統資源、帳戶或區域設定以及某些啟動備用方案可以使用容器。請檢查您的沙盒返回的執行環境,而不是假設每個資源都使用 Firecracker。

Lizard SDK 透過 getInfo().runtime 暴露它;我們的 CLI 建立回應也報告了 firecracker。

獨立的機器使工作遠離您未從筆記型電腦共享的檔案。您放入該機器中的憑證和檔案仍然可供在那裡執行的程式碼使用。請設定其範圍以符合任務。

在 Lizard Sandboxes 中執行 Claude Code:安裝 Lizard CLI,登入並選擇一個專案。您需要 Anthropic API 金鑰或支援的 Claude 訂閱權杖才能進行模型呼叫。要註冊 Anthropic API 金鑰,請執行:lizard agents add anthropic。

對於 Claude 訂閱,請建立一個權杖並使用 Lizard CLI 註冊:claude setup-token lizard agents add claude。在提示符號處貼上憑證。請將其保存在您的儲存庫和指令歷史之外。以下指令假設註冊已成功;我們的即時測試使用了現有的 Claude 訂閱權杖。

建立工作區:將 YOUR_PROJECT_ID 替換為您的專案 ID:lizard sandbox create \ --project YOUR_PROJECT_ID \ --template claude \ --size small \ --timeout 3600000 \ --json。將 SB 設定為該回應中的沙盒 ID:SB = YOUR_SANDBOX_ID。

這裡的逾時設定為工作區提供了一小時的生命週期。預設為五分鐘,且執行指令不會延長其生命週期。請為任務設定足夠的時間,並在過期前儲存您的工作。有關生命週期指令,請參閱 CLI 參考。

在沒有 GitHub 權杖的情況下複製已提交的儲存庫:從本地儲存庫建立一個 Git bundle 並上傳:BUNDLE_DIR = $( mktemp -d ) git bundle create "$BUNDLE_DIR/app.bundle" HEAD lizard sandbox files put \ "$SB" "$BUNDLE_DIR/app.bundle" /workspace/app.bundle lizard sandbox exec "$SB" -- \ git clone /workspace/app.bundle /workspace/app。

該 bundle 包含從 HEAD 可達的已提交歷史記錄。它排除了未提交和未追蹤的檔案,但歷史記錄中提交的任何機密仍然會隨之傳輸。在傳輸儲存庫之前請先審查它。複製此 bundle 可能會使 checkout 處於分離的 HEAD 狀態;您仍然可以檢查代理的編輯並匯出更改的檔案。

給 Claude 一個小任務:lizard sandbox prompt "$SB" \ --agent claude \ --cwd /workspace/app \ "執行測試。以最小的合理更改修復一個失敗的測試。報告更改了什麼以及哪些測試通過了。"。請保留 --agent claude:省略代理選項可能會選擇預設代理。

Lizard 執行器在遠端工作區內部使用權限繞過,因此任務可以在沒有互動提示的情況下執行。因此,工作區邊界和您提供的憑證需要與任務匹配。其中的程式碼可以讀取程序可用的模型憑證。在我們的測試中,一個 Python 函數在測試預期其總和時執行了減法。Claude 更改了該函數,之後獨立的測試執行成功。

審查並檢索結果:lizard sandbox exec "$SB" -- \ git -C /workspace/app status --short、lizard sandbox exec "$SB" -- \ git -C /workspace/app diff、lizard sandbox files get \ "$SB" /workspace/app/path/to/changed-file ./changed-file.review。將 path/to/changed-file 替換為您要下載的檔案。

在合併更改之前,請自行執行專案的測試。我們檢查了遠端差異,重新執行了測試並下載了修正後的檔案;其內容與遠端結果相符。當您儲存結果後,請暫停工作區:lizard sandbox pause "$SB"。等待其狀態變為 paused。成功暫停會停止計算費用。

在移除沙盒之前匯出工作,並在資料必須在沙盒刪除後仍然存在時使用持久性儲存卷(Persistent Volumes)。儲存的資料仍然可能產生費用。

雲端工作區的成本是多少?Lizard 在 2026 年 10 月 18 日公佈的計算費率為:

Small: 2 vCPU, 4 GB, 每小時 $0.0162

Medium: 4 vCPU, 8 GB, 每小時 $0.0324

Large: 8 vCPU, 16 GB, 每小時 $0.0648

以 Small 費率計算,100 沙盒小時會消耗 $1.62 的計算使用量。模型呼叫、儲存和任何其他計費資源是分開的。Lizard Pro 每月費用為 $19(含稅),並包含 $19 的使用量。超出此金額的使用量則按用量付費。新帳戶可獲得七天試用期,包含 $5 的使用量;需要信用卡。

Claude 訂閱或 Anthropic API 費用與 Lizard 費用是分開的。在評估任務規模之前,請檢查當前定價。運行的沙盒在閒置時仍會消耗計算資源。完成後請成功暫停它;當計算資源暫停時,持久性儲存卷的儲存仍可能產生費用。

常見設定問題:

原生沙盒無法在 Linux 上啟動:安裝 bubblewrap 和 socat,然後重新啟動 Claude Code。檢查主機的命名空間限制。

所需網域被阻擋:僅將所需主機新增到允許清單,然後透過代理重試。

bubblewrap 在容器內失敗:巢狀沙盒取決於主機和容器配置。請遵循支援的設定,而不是靜默禁用隔離。

Docker 執行期間主機檔案發生更改:檢查可寫入的掛載。掛載的儲存庫會與主機共享這些編輯。

在 Lizard 中啟動了錯誤的代理:明確傳遞 --agent claude。

雲端任務在完成前結束:設定適當的生命週期,並在過期前儲存結果。指令不會重置生命週期。

我們測試了什麼:在 2026 年 10 月 18 日,我們在 macOS 上以及透過 Lizard CLI 4.0.58 在一個全新的 Small Firecracker 沙盒中執行了 Claude Code 2.1.286。macOS 檢查允許

Share

覺得值得一看?分享給朋友。

以上為 AI 自動翻譯導讀。原文版權歸 DEV Community (Claude Code) 所有, 建議透過「閱讀原文」前往原始網站,以取得最完整資訊並支持原作者。

Newsletter

不用每天追,AI 重點每週寄給你

43 個來源、每 2 小時更新,太多看不完。電子報每週挑最值得看的幾則,附上 Max 的看法。

每週一封。Email 只用來寄電子報,每封信都能一鍵退訂。