从 E2B 迁移
本页介绍怎样把程序从 E2B 迁到 Kibotos:确认用到的能力可用,把 SDK 指向网关,再替换有差异的部分。各调用的完整行为见本节其他页面。
前提条件
向部署方要下面这些:
- 网关的 API key 与域名。
- 可用的 Template 名称。
- 网关证书由私有 CA 签发时,这个 CA 的证书文件。
步骤
1. 确认 SDK 包
兼容性以官方 JavaScript SDK 为准,见兼容版本。
| 包或工具 | 在 Kibotos 上 |
|---|---|
JavaScript 的 e2b | 2.46.1 通过验收,请使用这个版本 |
Python 的 e2b | 未测试。依赖它之前先跑自己的测试 |
@e2b/code-interpreter | runCode 需要 sandbox 里有 Code Interpreter 服务,Kibotos 的 Template 都不包含它。改用 sandbox.commands.run 运行代码 |
@e2b/desktop | 未测试。截图与键鼠输入使用原生 API 或 kibo 的桌面接口 |
| E2B CLI | 网关不提供 Template 构建与 sandbox 日志。Template 用 kibo-build 构建,见下表 |
2. 确认用到的功能
不支持的选项会返回错误,不会被忽略,所以跑一次测试就能看出还要改什么,见返回的错误。
| 你用到的 | 在 Kibotos 上 | 处理 |
|---|---|---|
| 自己的 Template | 由 Operator 发布,不经 SDK | 把容器镜像交给部署方构建 Template,再把名称传给 Sandbox.create |
Sandbox.create 的 envs | 返回 501 | 在每次 sandbox.commands.run 时传 envs |
| 内存暂停 | sandbox.pause() 可用,但不保留内存与进程 | 把状态放在 Volume 上,Sandbox.connect 之后重新启动进程,见暂停与恢复 |
autoResume | 返回 501 | 使用 sandbox 之前调用 Sandbox.connect |
快照与 Sandbox.fork | 返回 501 | SDK 里没有替代。要复制数据,用 kibo 或原生 API 导出与恢复 |
network.allowOut 里的域名,或 network.rules | 返回 501 | 使用地址与 CIDR,或让流量经 network.egressProxy 离开,见网络 |
递归的 files.watchDir | 返回 unimplemented | 分别监视每个目录 |
Template 的 cpuCount 或 memoryMB | 所有 sandbox 都用网关的设置 | 向部署方提出,见资源 |
| 团队与按团队的 API key | 整个部署共用一个 API key | 在自己的程序里区分用户。团队指标返回 501 |
| MCP 配置、IAM token | 返回 501 | 网关里没有替代 |
单次上传的文件不能超过 1 GiB,进程或文件请求的单条消息限制为 4 MiB,见命令与文件的注意事项。
3. 把 SDK 指向网关
安装通过验收的 SDK 版本。验收在 Node.js 22 或更新版本上运行:
npm install e2b@2.46.1设置连接参数,这一步不用改代码:
export E2B_API_KEY="$(cat e2b-api-key.txt)"
export E2B_DOMAIN=sandbox.example.com
export NODE_EXTRA_CA_CERTS="$PWD/sandbox-ca.pem"证书来自公共 CA 时,不用设置 NODE_EXTRA_CA_CERTS。
4. 更换 Template 名称
把 E2B 的 Template 名称换成部署方给的名称:
const sandbox = await Sandbox.create('kibotos-minimal');不写名称时,Sandbox.create 请求名为 base 的 Template。部署里没有这个 Template 时,调用返回 404。
5. 运行程序
在这套部署上跑你的测试。返回 501 时,错误里写明了能力名称,对照第 2 步修改。网关没有实现的接口返回普通的 404,SDK 会把它报告成 sandbox 不存在,见返回的错误。
行为差异
下面这些调用可用,但行为与 E2B 不同:
- 网络访问:SDK 默认请求公网访问。除 DNS 外的 UDP(例如 QUIC、NTP)不被允许,见保证与边界。
- 数据:需要保留的数据放在 Volume 上。恢复后
/tmp与/run是空的,根文件系统的其余部分尽力保留。 - Volume:不带
volumeMounts创建的 sandbox 有自己的 Volume,挂在/data,随 sandbox 一起删除,见 Volume。 - 容量:没有 node 放得下时,创建与
connect返回 503,见容量不足。
下一步
- E2B 兼容:网关提供与不提供的全部能力。
- Sandbox 与生命周期:创建、暂停与恢复、到期。
- 接入 Agent 平台:身份、会话对应与失败处理。
- API 概览:只有原生 API 提供的能力。
E2B 兼容
E2B 网关 kibotos-e2b 把 E2B 的控制 API 和 envd 协议翻译成 Kibotos 的原生 API,用官方 E2B SDK 写的程序可以直接在 Kibotos 上运行。这一组页面介绍哪些 SDK 调用与接口可用、它们在 Kibotos 上的行为,以及哪些能力不支持。
Sandbox 与生命周期
用 E2B SDK 在 Kibotos 上创建、暂停、恢复、延期和删除 sandbox,调用与 E2B 相同。本页介绍各个生命周期调用在 Kibotos 上的行为、新 sandbox 得到的资源、到期时间与 Idempotency-Key 重试的规则,以及查询返回的内容。