Skip to content

2026.10.12 Release v0.7.3 ​

32 个提交,来自 15 位贡献者。

⭐ 亮点 ​

  • 端口映射的连接不再随机被重置。 修复了几个存在已久的端口映射问题:跨机访问沙箱服务时偶发 502、空闲连接 60 秒后被重置、复用端口时新连接被旧会话重置、同一端口上的两个沙箱互相干扰。
  • 跨机恢复直接从 S3 读取。 恢复沙箱时,节点不再先把整块磁盘从 S3 拷到本地;沙箱需要的数据直接从 S3 快照读取,恢复更快,节点也不必预留整块磁盘空间。
  • S3lvol 热升级:I/O 暂停从约 40 秒降到约 8 秒。
  • 修复偶发块 I/O 短读短写导致的数据损坏或卡死。

🎯 核心特性 ​

沙箱支持 MCP ​

沙箱现在可以像 E2B 一样,在创建时通过 mcp 参数启用 MCP(Model Context Protocol)网关:

  • 创建沙箱时传入 mcp,沙箱启动后 Python / Node / Go SDK 会在其中拉起 mcp-gateway,并把 MCP URL 和 token 返回给调用方;网关启动失败会直接销毁沙箱。
  • 未显式指定模板时,SDK 查找别名为 mcp-gateway 的模板,找不到再用 CUBE_TEMPLATE_ID。默认沙箱镜像里没有网关程序,可用 examples/mcp-gateway 下的参考实现制作模板,中英文说明详见 MCP 网关指南。

✨ 功能增强 ​

模板与存储 ​

  • S3lvol 热升级:升级期间沙箱 I/O 的暂停时间从约 40 秒缩短到约 8 秒,全程卷保持挂载(#1822)。
  • 跨机恢复不再把整块磁盘拷到节点:恢复出的沙箱按需直接读取 S3 快照上的数据,显式 decouple 仍会生成独立副本;删除源快照会等仍在读取它的恢复卷消失后再执行(#1898)。
  • 从镜像创建模板时,目标节点离线或不存在会在 0.08 秒内立即报错,不再先花几分钟拉镜像、解包后才失败(#1829)。
  • S3 卷可以改用宿主机自身的实例角色认证,不必在每台宿主机上放置长期访问密钥:配置 CREDENTIALS=instance_role 并去掉两个密钥即可。该能力适用于手工安装、且存储端点为 AWS 的场景,并要求每台 CubeMaster 与 Cubelet 宿主机上都挂载了对应角色,而不仅是运行沙箱的节点;详见 S3 卷使用指南(#1751)。

生命周期与控制面 ​

  • 暂停提速:暂停收尾阶段的 VM 拆除改为后台执行,单次暂停快约 41%(2 GiB 沙箱 150ms → 88ms),并发 50 时快约 20%,恢复不受影响(#1731)。

部署与运行时 ​

  • PVM host / guest 内核从 6.6.69 升级到 6.6.117(#1852)。

Web UI / CubeOps / 其他 ​

  • Web UI 模板卡片现在展示模板别名(#1876)。
  • 新增两篇博客:全球招聘,以及面向 OpenClaw / DSH 的企业级安全执行平面(#1884)。

🐛 Bug 修复 ​

生命周期与沙箱 ​

  • 修复暂停后的沙箱在 Info 查询中丢失元数据(labels、模板、规格、卷挂载)的问题(v0.7.0 引入);按 label 识别沙箱的上层因此无法恢复沙箱(#1861)。
  • 修复快照刚创建后就克隆报 no more resource 的问题:节点心跳还没扫到新快照时,调度器会误以为没有节点持有该模板(#1909)。
  • 修复集群中模板较多时模板列表请求挂起的问题(#1899);列表接口与 cubemastercli tpl ls 同时支持分页(limit / offset)。
  • 修复沙箱进程可能仍存活时,网络 tap、IP、卷就被提前回收、进而弄断在用沙箱网络的问题;清理反复失败时只告警一次并降频重试,新增 cubecli diag tap-holders / cubecli diag reclaim 帮助定位并清理卡住的持有者(#1810)。
  • 修复块 I/O 偶发短读短写时数据被截断或卡死的问题(#1825)。
  • 修复生命周期服务退出时被事件订阅者卡住的问题(#1825)。
  • 修复从快照创建沙箱时,客户端重发相同的 volumeMounts 被拒绝("must have exactly one declaration")的问题;官方 E2B SDK 每次创建都会重发(#1894)。

网络与安全 ​

  • 修复两个沙箱监听同一端口、又访问同一远端时互相覆盖端口映射会话、导致一方网络中断的问题(#1915)。
  • 修复过期的端口映射会话偶尔未被清理、会话计数虚增的问题(#1914)。
  • 修复端口上残留的旧会话把该端口下一个新连接重置掉的问题;新连接现在直接替换旧会话(#1919)。
  • 修复端口映射 TCP 状态机停留在 SYN_RECV 的问题:空闲的已建立连接 60 秒后被删除,下一个报文收到 TCP RST;状态机现在对双向报文都推进(#1918)。
  • 修复 arm64 沙箱 IPv6 一直不可用的问题:内核把 IPv6 编译成了模块,而 guest 内核是不带模块的单镜像。同时开启了 PSI,与 x86_64 对齐;Android(redroid)沙箱两者都依赖,此修复也消除了偶发的端口绑定失败(#1879)。

部署与升级 ​

  • 修复 cgroup v2 宿主机上 Cubelet 每次被抓取指标就为每个沙箱打一条错误日志的问题;无人使用的旧版 containerd cgroup monitor 默认关闭,按沙箱的资源指标不受影响(#1869)。
  • 修复 cubemastercli 僵尸进程不断堆积的问题(一个 Pod 三周累积 6500+);存量部署重启一次 Pod 即可清理(#1860)。

其他 ​

  • 修复从已删除的快照创建沙箱返回 HTTP 500、SDK 无限重试的问题;现在正确返回 404 并指明缺失的模板 / 快照(#1868)。
  • 修复 Go SDK Watcher 并发场景下重复关闭响应体的问题(#1405)。
  • quickstart 示例将 e2b Python SDK 限制在 2.51 以下:该版本调用了 CubeAPI 不提供的接口,会得到 405(#1909)。
  • 文档移除 agent 平台 freeze / resume 指南及一条过时的快照耗时说明(#1913)。