内容提要
Docker Sandboxes在Mac上为Coding Agent提供可删除的微虚拟机,隔离内核、文件系统、网络和Docker Engine,但挂载的项目目录可被Agent直接读写。安装到运行OpenCode约十分钟,难点是模型登录需单独配置,如SuperGrok需/connect并调整网络策略。适合人机协作,但非无人值守,且工作区敏感文件对Agent可见。
延伸解读
隔离边界:工作区是例外
Docker Sandboxes 的微虚拟机隔离了内核、文件系统、网络和 Docker Engine,但挂载的项目目录是例外。Agent 在工作区内的读写权限与用户本人相同,没有额外限制,因此 .env、.git 等敏感文件对 Agent 可见。隔离保护的是工作区外部,而非内部。用户需明确这一边界,避免将敏感信息放入工作区。
模型登录是主要配置成本
安装到运行 OpenCode 不到十分钟,但模型登录可能更耗时。Sandbox 不继承宿主机上的登录状态,需单独配置。对于 SuperGrok 这类订阅制 OAuth 凭证,sbx secret set 仅支持 API Key,需在 TUI 中 /connect 并手动放行 xAI 域名。若使用 Anthropic、OpenAI 等 API Key,则通常无需修改网络策略。
适合人机协作,非无人值守
当前方案适合人在旁边与 Agent 协作修改同一棵树。Agent 退出后环境保留,可随时重连,但 YOLO 模式仅省去确认步骤,不省配置。官方支持列表外的工具(如 Kimaki、omp)无法开箱即用。因此,该方案尚未达到无人值守的程度,用户需保持在场监督。
Q&A
Docker Sandboxes 和传统容器方案有什么本质区别?
传统容器方案通常共享宿主机的内核和 Docker,甚至把 docker.sock 挂载进容器,风险较高。Docker Sandboxes 为每个任务提供一个独立的微虚拟机,拥有自己的 Linux 内核、文件系统、网络和 Docker Engine,宿主机无法直接访问这些资源,但挂载的项目目录对 Agent 是直接可读写的。
在 Mac 上安装 Docker Sandboxes 需要什么条件?
官方支持 Apple Silicon Mac,系统至少为 Sonoma 14。Intel Mac 目前无法安装,因为 Homebrew cask 仅提供 arm64 版本。Docker Desktop 不是前置条件,sbx 会自行拉取微虚拟机。
如何安装并启动 Docker Sandboxes?
使用 Homebrew 安装:`brew trust docker/tap` 然后 `brew install docker/tap/sbx`。安装后需要执行 `sbx login` 登录 Docker 账号,然后启动 daemon:`sbx daemon start`,并初始化网络策略:`sbx policy init balanced`。之后即可在项目目录运行 `sbx run opencode`。
Docker Sandboxes 的网络策略有哪些档位?分别有什么特点?
官方提供三档网络策略:Open(全开)、Locked Down(全拦)、Balanced(默认拒绝,只放行模型 API、包管理器、代码托管和 Registry 等常见开发站点)。Balanced 是推荐档位,可在初始化时选择,也可在第一次 `sbx run` 时交互选择。
在 Docker Sandbox 中运行 OpenCode 时,如何配置模型登录?
Sandbox 不继承宿主机上的 OpenCode 登录状态。如果使用 API Key,可通过 `sbx secret set <provider>` 配置。如果使用 SuperGrok 这类订阅制 OAuth 凭证,需要在 TUI 中执行 `/connect` 选择 Headless OAuth,并可能需要调整网络策略,例如运行 `sbx policy allow network "*.x.ai:443,api.x.ai:443,auth.x.ai:443,accounts.x.ai:443"` 以放行 xAI 域名。
Docker Sandbox 中的工作区文件对 Agent 是否可见?有什么安全风险?
挂载的项目目录对 Agent 是直接可见且可读写的,路径与 Mac 上一致。这意味着工作区中的 .env、.git 等敏感文件对 Agent 可见,没有额外权限限制。隔离只针对工作区外部,不保护工作区内部。因此不适合无人值守场景,需要人在旁边协作。
如何停止、重新连接和删除 Docker Sandbox?
使用 `sbx stop` 停止 sandbox,但保留环境;下次用 `sbx run --name <sandbox>` 重新连接。彻底删除使用 `sbx rm`。如果需要 SSH 进入,先执行 `sbx setup ssh`,然后 `ssh <name>.sbx`,VS Code 的 Remote-SSH 也支持该主机名。