内容提要
Docker Sandboxes 让 Claude Code 在隔离的 Linux 微虚拟机中自主运行,无需逐条批准命令。它支持直接模式(立即修改本机项目)和克隆模式(在沙箱副本中修改,供审查后再应用)。实验表明,Claude 能完成编辑、测试、构建镜像和运行应用,但项目内可读文件(如 .env)仍可能泄露,网络规则只控制连接目标而非发送内容。
延伸解读
直接模式与克隆模式:如何选择
直接模式下,Claude 的修改会立即出现在本机项目文件夹中,适合希望实时看到编辑结果的场景。克隆模式则在沙箱内复制一份 Git 仓库,Claude 的提交需手动获取并审查后才能应用到原项目,适合无人值守任务。文章实验表明,直接模式可能遗漏 .git/hooks 等非代码变更,而克隆模式提供了审查步骤,但不会自动保证代码安全。
网络规则与数据泄露风险
Docker Sandboxes 的网络预设控制 Claude 可以连接的目标,但不会限制发送的内容。实验显示,当允许连接到某个测试服务器时,Claude 能将项目内可读文件的值发送出去。因此,即使阻止了某些域名,仍需注意项目中的敏感文件(如 .env)可能被读取并外传。网络规则只解决“去哪里”,不解决“发什么”。
凭证管理:不要依赖 .gitignore
克隆模式使原项目文件夹在沙箱内可读,包括被 Git 忽略的文件。.env 中的数据库密码等凭证即使未提交,也可能被 Claude 读取。文章建议在启动 Claude 前,将任务不需要的 API 密钥、密码等移出项目文件夹。使用 sbx secret set anthropic 或 /login 进行认证,避免将密钥保存在项目文件中。
沙箱生命周期与数据保留
退出 Claude 不会删除沙箱,其文件、安装的软件和 Docker 状态在停止后仍保留。使用 sbx stop 停止,sbx run 重新打开。移除沙箱(sbx rm)会删除其私有内容,因此克隆模式下的分支需提前获取。直接模式下的修改已在本机项目文件夹中,移除沙箱不会撤销这些更改。
Q&A
Docker Sandboxes 如何让 Claude Code 在无需逐条批准命令的情况下安全运行?
Docker Sandboxes 通过在一个轻量级 Linux 微虚拟机(microVM)中运行 Claude Code,为其提供隔离环境。Claude 在沙箱内拥有 sudo 权限,可以安装软件、修改系统文件,但这些权限不会影响宿主机 Mac。沙箱通过工作区挂载和网络代理控制对项目文件和网络目标的访问,从而在无需逐条批准命令的情况下限制其影响范围。
直接模式和克隆模式有什么区别?我应该选哪种?
直接模式下,Claude 直接修改你选择的项目文件夹,更改立即生效;克隆模式下,Claude 在沙箱内复制一份 Git 仓库进行修改,原始项目保持不变,你可以审查提交后再应用。如果你希望立即看到编辑结果,选直接模式;如果你希望在更改项目前先审查,选克隆模式。
在 Docker 沙箱中运行 Claude Code 时,如何配置网络访问?
Docker 提供三种网络预设:Open(广泛出站访问)、Balanced(允许常见开发服务,如模型 API 和包注册表,其他拒绝)、Locked Down(默认不允许任何目标)。你可以用 `sbx policy init balanced` 初始化 Balanced 预设,并通过 `sbx policy deny network --sandbox my-project example.com` 等命令为特定沙箱添加或拒绝规则。
Claude 在沙箱中能读取项目中的 .env 文件吗?如何保护敏感信息?
是的,Claude 可以读取项目文件夹内的所有文件,包括 .env 文件,即使这些文件被 .gitignore 忽略。克隆模式下,原始项目文件夹对沙箱可读。为了保护敏感信息,应在启动 Claude 前将 API 密钥、数据库密码等移出项目文件夹,并使用 `sbx secret set anthropic` 等方式管理认证信息。
如何从克隆模式的沙箱中获取 Claude 的更改并应用到我的项目?
在克隆模式下,Claude 的更改保存在沙箱内的分支中。你可以在宿主机上运行 `git fetch sandbox-my-project sandbox/health-check` 获取提交,然后用 `git diff HEAD FETCH_HEAD` 查看差异。确认后,通过常规 Git 流程(如 checkout 或 merge)应用更改。
Claude 在沙箱内构建的 Docker 镜像和容器会出现在我本机的 Docker 中吗?
不会。沙箱内有一个独立的 Docker Engine,Claude 构建的镜像和运行的容器只存在于沙箱内部,不会出现在你 Mac 的 Docker 列表中。这让你可以安全地使用 Docker 进行开发,而不会影响本机的容器。
如何停止沙箱并确保我的工作不会丢失?
使用 `sbx stop my-project` 停止沙箱,其文件、安装的软件和 Docker 状态都会保留。之后可以用 `sbx run --name my-project` 重新打开。如果不再需要,用 `sbx rm my-project` 删除沙箱,但删除前请确保已获取克隆模式中想要保留的分支。直接模式下的更改已保存在你的项目文件夹中,删除沙箱不会撤销它们。