Skip to main content

Agent 执行沙箱

前置:知道容器(Docker)大概是什么。不需要懂内核、虚拟化或者操作系统课上的那些东西。

本专题回答:模型写出来的代码敢不敢直接跑,容器够不够用,以及每开一个隔离环境要等多久。

两件在没有隔离时都会真的发生的事:

  • 你让 Agent 清理临时文件,它生成的 shell 里有一行是 rm -rf / —— 不是恶意,只是路径变量拼接时空了
  • 你装了个网上找来的 MCP 工具,用着挺好,它在后台顺手读了一遍你的 ~/.ssh/id_rsa —— 这件事你根本不会察觉

所以问题不是「模型会不会犯错」,而是它犯错的时候能够到多远。执行沙箱划的就是这条线。

本专题只讲生产运行时的隔离

训练时也需要沙箱,但那是另一套东西 —— 并发规模差两个数量级、单个环境只活几十秒、而且必须能重置回同一个起点。那部分见 Agent 训练环境,逐条对比见 训练环境 01 篇

先约定几个词,本专题全程使用:

意思
沙箱(sandbox)一个受限的执行环境,里面的代码伤不到外面。注意它限制的是「破坏能力」,不是「信息搬运能力」
逃逸(escape)沙箱里的代码突破隔离、拿到宿主机权限。这是所有隔离方案最终要防的那件事
宿主(host)跑着沙箱的那台机器或那个进程。相对地,沙箱内部叫 guest
内核操作系统的核心,负责管硬件和进程。沙箱和宿主共不共享内核,是三条路线最根本的分界
系统调用(syscall)程序请求内核干活的接口,比如打开文件、发网络包。拦不拦系统调用、在哪一层拦,决定了隔离强度和开销
microVM精简过的虚拟机,去掉了传统虚拟机里绝大多数不必要的设备模拟,所以能在一百多毫秒内启动,代表实现是 Firecracker
爆炸半径出事之后影响到的范围。沙箱的意义就是把它从「整台宿主机」压缩到「一个沙箱实例」

一、隔离强度和启动速度是一对矛盾

划这条线不难,难的是同时满足两个互相拉扯的要求 —— 既要关得够死,又要开得够快(用户在等回答,你不能让他等一台虚拟机开机):

隔离要同时满足两组互相拉扯的要求安全内核不共享 —— 逃逸不出宿主文件系统隔离 —— 看不见别人的数据网络受控 —— 拿到东西也发不出去方向相反可用冷启动足够快 —— 用户等不了 30 秒能装依赖 —— pip install 要能跑得起来状态可保留 —— 多轮对话共用一个环境隔离越强,启动越慢、资源开销越大。三条主流技术路线就是在这条轴上取的三个不同位置 ——所以「哪条路线最好」这个问题没有答案,只有「你的场景把滑块放在哪儿」。
把这两栏并排看,就能理解为什么沙箱这件事没有银弹:左边每加强一分,右边就要付出一分。

隔离越强,启动越慢、资源开销越大。三条主流技术路线就是在这条轴上的三个不同位置。

二、三条隔离路线

三条路线,按隔离强度从弱到强排列代表实现① 容器 · Docker / containerd② microVM · Firecracker③ 用户态内核 · gVisor靠什么隔离共享宿主内核靠 namespace + cgroup独立内核KVM 硬件虚拟化边界拦截系统调用在用户态重新实现一遍启动与开销启动约 100 ms开销最小启动约 125 ms内存开销约 5 MB启动快于虚拟机但系统调用有额外开销主要弱点内核漏洞即逃逸只隔了一层需要嵌套虚拟化支持不是所有云主机都给兼容性不是 100%冷门系统调用可能不支持注意三者的启动时间其实在同一个数量级 —— 真正拉开差距的是最后一行,以及宿主环境给不给你选的余地。
下一篇会逐条拆这三行背后的机制。这里先记住一件事:容器和 microVM 的启动时间差不多,所以「容器更快」不是选它的理由,「宿主不支持 KVM」才是。
← 快、弱隔离           慢、强隔离 →

三者不是简单的优劣关系 —— 02 篇会说明它们各自防住了什么、防不住什么。

三、正文构成

#标题读完能回答的问题
01为什么需要沙箱到底怕的是什么?「隔离」这两个字其实分成四件独立的事,以及什么情况下你不需要沙箱
02三条隔离路线容器够不够?三条路各自把代码关在哪一层,分别防住了什么、防不住什么
03E2B 与快照机制一台虚拟机凭什么能在一百毫秒内起来?任务做到一半怎么把它冻住、明天再解冻
04开源产品怎么做已经上线的产品实际选了哪条路?OpenHands 为什么同时留了五种后端
05选型与落地我该选哪个?如果决定不上沙箱,靠权限分层能顶到什么程度

四、拆解对象

项目协议语言定位
daytonaio/daytona71,960Agent 运行环境,star 最高
firecracker-microvm/firecracker36,147Apache-2.0RustmicroVM,AWS Lambda 与 Fargate 的底座
kortix-ai/suna20,119NOASSERTIONTypeScript最接近 Manus 的开源实现
google/gvisor19,118Apache-2.0Go用户态内核
e2b-dev/E2B13,474Apache-2.0PythonAgent 沙箱的事实标准 SDK
superradcompany/microsandbox7,767Apache-2.0Rust轻量 microVM 方案
e2b-dev/infra1,331Apache-2.0GoE2B 的服务端,快照机制在这里
OpenHands/software-agent-sdk1,008MITPython五种 workspace 后端并存

五、与其他专题的关系

← 回到 Agent Infra 板块总览