Docker 出的 AI 保险箱:microVM 隔离 + 凭证不进 VM,Claude Code 在沙箱里随便折腾

你让 Claude Code 装依赖、改配置、跑脚本。每一步都弹窗问你"确定吗",烦到你想砸键盘;全放开吧,又怕它把宿主机搞崩。

Docker 的答案是:sbx run claude,一条命令,给 agent 一个独立的 microVM 小世界。它在里面随便折腾——装包、跑 docker、改配置、甚至跑 sudo rm -rf /*——都碰不到你的宿主。你唯一要记住的是:用完了 sbx rm 清掉。

它不是"更安全的容器",是另一种东西

这是最容易被误解的一点。很多人以为 Docker Sandboxes 就是"加了权限限制的容器",完全不是——它是 microVM。

普通容器用 namespace + cgroup 隔离,所有容器共享宿主机的同一个内核(8/30 那篇讲过这个坑:容器挡不住内核级逃逸)。而 Docker Sandboxes 给每个沙箱一整个独立的虚拟机:独立的 Linux 内核、独立的 Docker daemon、独立的文件系统、独立的网络栈。

在 Linux 上它走 KVM,macOS 走 Hypervisor.framework,Windows 走 Windows Hypervisor Platform。跑在超管理器(hypervisor)层面,不是命名空间层面——agent 就算触发了内核漏洞,逃逸的也只是沙箱这个客户机内核,宿主机纹丝不动。

正因为是 microVM,agent 在里面能做的事比"普通容器里"多得多:它有自己的 Docker daemon,可以随便 docker builddocker run、拉镜像、起 compose——这些操作全在沙箱内部完成,不影响你宿主机的 Docker 环境。这是"自主 agent"和"容器里受限执行"的本质区别:前者给它一台能自由折腾的小电脑,后者只给它一个笼子。

完整架构长这样:宿主机侧管凭证、网络代理、MCP gateway;沙箱 VM 里有 agent、独立 daemon、工作区挂载;所有出站走代理、受策略控制。

凭证才是它最聪明的设计

microVM 隔离讲的是"代码搞不坏宿主机",但 agent 要干活得连 API、碰云服务——凭证怎么给才是真正要命的问题。

Docker 的方案很巧妙:凭证永远留在宿主机,不进沙箱 VM。沙箱里的 agent 拿到的是一个占位符(sentinel),真正干活时,请求会经过宿主机上一个代理(proxy)——代理在出站那一刻,把占位符替换成真实凭证,请求才离开沙箱。

这意味着:真实密钥从头到尾没进过 VM。就算 agent 的沙箱被攻破,攻击者拿到的也只是占位符,没有真凭证。这个设计和 microVM 隔离是配套的——代码隔离负责"agent 干不了坏事",凭证代理负责"就算它想干,也没钥匙"。

网络策略:默认拒绝,不是默认放行

沙箱默认的网络策略叫 balanced(平衡)模式——听名字温和,实际很硬:它会自动生成约 197 条网络允许规则,并且默认拒绝这几类:

  • 宿主机的 localhost / 局域网私有地址(agent 碰不到你本机服务)
  • 云平台 metadata 端点169.254.169.254——拿过 AWS 凭证的都知道这地址多危险)
  • 各家遥测域名(防数据外泄)

也就是说,agent 默认出不去,只能访问策略放行的目标。想放开某个域名,用 sbx policy allow network 加规则;出了诡异问题,用 sbx policy log 看它到底想连哪。从"默认允许 + 事后封堵"变成"默认拒绝 + 显式放行",这是给 agent 的沙箱和普通网络配置最根本的区别。

Sandbox Kits:把"安全环境"变成可复用的模板

一个沙箱配好工具、网络规则、凭证、启动命令,下次还要重新配一遍?Docker 用 Sandbox Kits 解决——把一整套环境定义打包成可复用的规格,运行时强制执行。

两种 Kit:

  • Mixin Kits:给已有 agent 叠加能力(装 linter、注入团队配置、放行指定服务)——轻量,可多个叠加
  • Agent Kits:定义一套完整环境(工具 + 网络策略 + 凭证 + 启动逻辑 + 给 agent 的指令)

举个例子:团队想统一所有 Claude Code 会话的环境——装好审定的开发工具、只放行内网信任服务、凭证走代理、把项目规范写进 AGENTS.md。这些全塞进一个 Kit,以后每个人 sbx run claude --kit ./team-kit/,一次就绪。这就是把"安全"从手动配置变成了团队可共享的产物。

价格和门槛

sbx CLI 免费,包括商用——只有组织治理(统一管网络/文件系统/MCP 策略,跨所有人统一执行)才需要单独付费订阅。支持 Claude Code、Copilot CLI、Codex、OpenCode、Kiro、Gemini CLI 等主流 agent。需要 Docker Desktop 4.58+。

有坑吗?有,但可预期

  • 资源开销:一个 microVM + 独立 daemon,比普通容器重不少。跑大项目、频繁起沙箱会吃内存和磁盘(镜像、层、卷都堆在沙箱里)。
  • 还在 Experimental:文档明确说会快速迭代、可能有兼容性破坏的改动。生产环境别指望它今天的行为明天不变。
  • 工作区挂载有讲究:文档特别提醒别把网络盘(SMB/NFS/云同步文件夹)挂成工作区——沙箱通过文件系统 passthrough 访问,每次读写都走网络,会慢到你想哭。
  • 它防"搞坏宿主",不防"乱用你的网络/凭证":网络策略、凭证代理的默认值是好的,但真要进生产,得按你的威胁模型调策略。

明天就能试

1
2
3
4
5
6
7
8
9
# macOS
brew trust docker/tap && brew install docker/tap/sbx
# Windows
winget install Docker.sbx
# Ubuntu
curl -fsSL https://get.docker.com | sudo REPO_ONLY=1 sh && sudo apt-get install docker-sbx

# 在项目目录里把 Claude Code 关进沙箱
cd ~/my-project && sbx run claude

进去之后,让 Claude Code 跑点"危险操作"试试——装个包、改个配置、甚至 sudo rm -rf /*(放心,沙箱里跑,宿主没事),感受一下什么叫"放手让它干"。

一句话:Docker Sandboxes 把"给 agent 开权限"这件事,从"信任它"变成了"隔离它 + 不给钥匙"。microVM 隔离是墙,凭证代理是不给钥匙,网络策略是锁门——三件套配齐,agent 才能既自由又安全。


搬砖程序员带你飞,专注 Golang / AI / 后端。每天一篇,讲清楚一个技术真相。

0%