AI Agent 作为具备独立思考与自主执行能力的智能体,其运行形态正从无状态容器演变为需要高频修改配置、安装动态依赖的有状态沙箱。当 Agent 需要在沙箱内修改系统配置、安装工具链、长时间执行复杂任务,并需要频繁在多节点间进行**现场恢复(Resume)**时,传统的容器镜像分发机制遇到了瓶颈。
OpenAtom openEuler(简称 “openEuler” 或 “开源欧拉”)推出的 Conch 正是针对这一场景设计的沙箱引擎。在上一篇文章
《openEuler Conch沙箱引擎:如何用毫秒级速度给“闯祸”的小龙虾套上“海螺”壳》已针对 Conch 进行了详细介绍。本文将深入其背后的架构设计,围绕以下核心问题展开介绍:
AI Agent 沙箱已经从简单的进程运行载体,升级为可隔离、可动态修改、支持断点现场恢复的完整系统运行环境,镜像除了需要交付应用
rootfs,还必须承载沙箱启动依赖、多组件关联规则与任务运行现场恢复能力。传统 OCI 镜像虽然实现了
rootfs的标准化打包、寻址与仓库分发,但落地到强隔离类 AI Agent 沙箱场景时,存在两大核心短板。
OCI 镜像仅以应用根文件系统为核心承载对象,只能打包业务程序、系统依赖、配置文件及分层元数据,仅能满足常规无状态容器部署场景。面向基于 MicroVM 的强隔离 Agent 沙箱时,仅依靠
rootfs无法直接拉起完整运行环境:
简言之,传统 OCI 仅能说明应用包含哪些文件,却无法定义沙箱的启动方式、现场恢复规则以及各类依赖组件的配套关联逻辑。
当前容器生态已具备成熟的
rootfs数据面加速方案,eStargz、SOCI、Nydus 等工具依托索引预取、旁路元数据、块级存储优化、跨镜像去重等能力,实现了镜像按需拉取、快速启动,大幅优化了单一根文件系统的部署效率。
但这类优化方案的作用边界仅局限于
rootfs,并未对沙箱多组件做统一的标准化组织,一旦涉及内核、虚拟机快照、内存运行态等扩展资产,存在以下技术空白:
rootfs支持镜像仓库标准化分发,内核、快照链、内存状态等资产需要单独传输配置,无法实现整套沙箱环境一键跨节点流转;基于以上现状,Conch 在镜像语义层补齐完整沙箱的标准化资产表达能力,将
rootfs、
sandbox启动组件、可选
mem-snapshot运行快照封装为可统一发布、拉取、解包、异地恢复的镜像制品。
现阶段 Conch 已完成存量 OCI 镜像向 native EROFS 格式的转换,依托
boot index元数据实现多组件结构化编排管理;后续将持续落地块级按需加载、跨镜像块粒度去重、多类型存储后端适配等能力,进一步提升大规模 Agent 集群下沙箱镜像的流转与存储效率。
图1 OCI 镜像与 Conch 完整沙箱镜像格式对比图
对比传统 OCI 镜像与 Conch 完整沙箱镜像的表达范围:OCI 镜像主要覆盖应用 rootfs,而 Conch 通过 boot index 将 rootfs、sandbox 组件和可选 mem-snapshot 组织为可启动、可恢复的沙箱镜像资产。
Conch 通过统一的镜像语义,将散落的组件打包成
一个完整的、可分发的沙箱运行单元。
完整沙箱(Complete Sandbox)定义:指一个 AI Agent 任务运行、迁移、恢复所需的
最小闭环要素集合。它不仅包含传统的文件系统(rootfs),还显式包含使其能运转的虚拟化边界组件(Kernel/Initrd)以及可选的运行现场(Memory State),并由统一的元数据索引(Boot Index)表达它们之间的强绑定恢复关系。
为适配
完整沙箱的定义,Conch 在架构上定义两个
核心对象:
| 对象 | 解决的问题 | 不能直接解决的问题 |
|---|---|---|
| 传统 OCI 镜像 | 应用 rootfs 与 layer 元数据 | 应用内容标准化分发 |
| sandbox-image | 把已有 rootfs 变成可启动沙箱镜像 | 不包含某次运行后的内存现场 |
| sandbox-snapshot | 把运行现场变成可恢复、可分发镜像 | 需要在稳定时机 pause 并导出,不能代替所有运行时调度能力 |
图2 Conch Boot Index 与 Manifest 结构示意图
展示 Conch 如何基于 OCI Image Index,通过 io.conch.kind 等 annotation 区分 rootfs、sandbox、mem-snapshot 组件,并在 conch pull / unpack 后恢复本地 snapshotter 与组件关联关系。
Conch 当前的工作流围绕五个命令展开:
conch convertconch pushconch snapshot exportconch pullconch unpack这套流程要解决的是端到端问题:从已有 OCI rootfs 出发,生成 Conch 原生镜像,发布到 registry,再在目标机拉取并恢复成本地可运行对象。
图3 Conch镜像工作流总览图
展示 Conch 从已有 OCI rootfs 出发,经过 conch convert 生成 sandbox-image,并通过 conch push / pull / unpack 完成分发与本地恢复;同时展示 conch convert --snapshot 和 conch snapshot export 生成 sandbox-snapshot 的两类快照路径。
用户拥有一个普通的传统 OCI 镜像(如包含大量 Python AI 工具链的镜像),需要将其转换为 Conch 可直接拉起的完整沙箱镜像。第一步是执行:
bashconchconvert--sourcedocker.io/library/ubuntu:latest\--kernel./vmlinux-5.10\--initrd./conch.initrd\--taglocalhost/conch/ai-agent-sandbox:v1内部转换(Convert)细节:
--kernel和--initrd归档为沙箱特有的元数据组件。boot index,统一写入本地本地存储中,并形成可管理的镜像记录。除了生成普通
sandbox-image,
conch convert也支持通过
--snapshot参数直接生成带基础运行现场的
sandbox-snapshot:
bashconchconvert--sourcedocker.io/library/ubuntu:latest\--kernel./bzImage\--initrd./conch.initrd\--snapshot\-tlocalhost/conch/ubuntu-snapshot:latest该执行路径会在完成 rootfs 格式转换、sandbox 组件封装后,自动创建沙箱实例并执行暂停操作,将生成的 mem-snapshot 与 rootfs、sandbox 的关联关系一同写入全新 boot index。该方式适合用于制作系统初始化完成后的基础启动态快照,可作为标准化环境复用的基准恢复点。
如果需要产出业务预热类快照,比如沙箱内完成依赖安装、工具链加载、Agent 初始化配置后的运行现场,更推荐先基于
sandbox-image启动沙箱并完成环境预热,再通过
conch snapshot export --sandbox-id方式导出快照镜像。
打快照的关键时机:
快照不能凭空构建,必须在沙箱运行到
确定性的、高价值的稳定状态时触发。
此时可以通过Conch SDK 对正在运行的 sandbox 进行pause来生成快照,由于本文核心点在于沙箱镜像构建,所以仅针对快照镜像部分进行展开。
从业务使用场景来看,
sandbox-snapshot可分为两类典型应用场景:
warmup-snapshot,多用于复用依赖部署、工具链初始化后的标准化环境;stage-snapshot,用于长周期 Agent 任务的断点保存、异常回滚与跨机续跑。两类仅作为场景化命名,核心镜像资产仍统一为
sandbox-snapshot。
生成
sandbox-snapshot共有三类常用入口:
conch convert --snapshot:基于存量 OCI rootfs 镜像,一键生成系统初始化后的基础启动态快照镜像。conch snapshot export --sandbox-id:对正在运行的沙箱实例导出快照,命令内部会自动执行 pause 保证文件、虚拟机、内存三态一致性,生成可跨节点分发的快照镜像。conch snapshot export --snapshot-id:依托已存在的稳定 rootfs 快照进行导出,无需执行 pause 操作,仅会解析现有元数据与快照依赖链,适合复用已固化的环境基线。conch snapshot export
就是一个单独的cli指令,来对运行中的sandbox构建快照镜像,执行该命令时,会先对当前沙箱进行pause,再对快照镜像进行导出。
bashconchsnapshotexport\--sandbox-id<running-sandbox-id>\-tlocalhost/conch/ai-agent-snapshot:v1如果用户已经有一个 rootfs snapshot id,也可以从它出发导出:
bashconchsnapshotexport\--snapshot-id<rootfs-snapshot-id>\-tlocalhost/conch/ai-agent-snapshot:v1导出过程中,Conch 会解析 rootfs snapshot 记录的 mem/sandbox 快照关系,找到对应快照链,再生成新的 boot index。最终得到的
sandbox-snapshot可以理解为“带恢复现场的完整沙箱镜像”。
标准 Registry 依靠 OCI 规范虽然能够利用 OCI Artifacts 存储任意扩展类型的描述文件与二进制 Blob,但它本身属于纯静态的内容寻址存储(Content-Addressable Storage),完全无法感知和处理
sandbox-image和
sandbox-snapshot内部组件以及沙箱启动时的内核解耦组装语义。
:基于 OCI descriptor 自定义 annotation 做能力扩展,完全遵循 OCI 兼容制品规范,无需对现有镜像仓库做任何改造。
conch push分发的是 Conchboot index及其引用的组件内容,包括native EROFS rootfs、sandbox组件(kernel/initrd)以及可选的mem-snapshot相关快照链。Conch 会通过boot index描述这些组件的类型、引用和恢复关系,而不是把它们当作普通容器rootfs处理。conch pull后,Conch 会解析boot index和组件 annotation,识别rootfs、sandbox、mem-snapshot等对象,并进入 Conch 专属 unpack 链路,在目标宿主机恢复EROFS snapshotter、本地镜像记录以及快照关联关系,最终交给 Conch 运行时按冷启动或快照恢复路径拉起沙箱。具体使用方式如下:
conch push
支持直接传入本地镜像引用与远端镜像地址,无需提前执行 conch tag,可一次性完成远端仓库的版本推送。
bashconchpushlocalhost/conch/ai-agent-sandbox:v1hub.oepkgs.net/conch/ai-agent-sandbox:v1conch pull
会把 Conch 原生镜像拉回本地,并自动完成 unpack。
bashconchpullhub.oepkgs.net/conch/ai-agent-sandbox:v1对于本地已经存在的镜像,也可以单独执行
conch unpack:
bashconchunpackhub.oepkgs.net/conch/ai-agent-sandbox:v1unpack 会把 boot index 中描述的组件关系恢复到本地 snapshotter:rootfs 进入 EROFS snapshotter,sandbox 和 mem-snapshot 的关联关系也被重建。这样,运行时拿到的就会是一组可以被 Conch 消费的本地对象。
面向想使用 Conch 的开发者,最小验证可以沿着一条端到端链路完成:从已有 OCI rootfs 生成
sandbox-image,启动沙箱完成初始化,再导出
sandbox-snapshot,最后在目标机恢复。
这条链路主要验证三个问题:
sandbox-imagesandbox-image 经 registry 流转后,目标机能否自动 unpack 并恢复本地运行关系sandbox-snapshot基本步骤如下:
1.执行
conch convert,从已有 OCI rootfs 生成
sandbox-image。
2.执行
conch push / conch pull,完成 registry 流转,并在目标机自动 unpack。
3.使用
sandbox-image启动沙箱,验证 rootfs 与 sandbox 组件能够正确组合。
4.在沙箱内完成初始化或预热动作,例如安装依赖、写入配置、加载工具链。
5.执行
conch snapshot export --sandbox-id ...,将运行现场导出为
sandbox-snapshot。
6.将
sandbox-snapshot发布并拉取到目标机,通过快照恢复路径启动沙箱。
通过这条链路,可以同时验证 sandbox-image 和 sandbox-snapshot 的核心价值:前者让已有 rootfs 变成可启动沙箱镜像,后者让运行现场变成跨机器可流转的恢复资产。
图4:Conch 完整沙箱镜像端到端验证流程
演示 Conch 镜像系统的最小验证链路:从 OCI rootfs 转换生成 sandbox-image,启动沙箱并导出 sandbox-snapshot,最终在目标环境通过快照镜像恢复沙箱运行状态。
当前 Conch 镜像系统已经打通从 OCI rootfs 格式转换、sandbox-image 构建、三类路径生成 sandbox-snapshot、镜像仓库标准化分发、目标节点自动 pull&unpack 还原组件关系、沙箱冷启动/快照恢复的端到端完整业务闭环,可支撑 AI Agent 沙箱环境标准化交付、运行现场跨节点迁移与任务断点续跑的核心场景。
下一步迭代计划
欢迎加入社区共建
Conch 已在 openEuler SIG-CloudNative 社区完整开源核心技术方案,诚邀行业伙伴、高校与个人开发者交流技术思路、参与共建优化。
可添加微信小助手进入 SIG-CloudNative 技术交流群,也可访问 AtomGit 仓库查阅完整项目材料、提交 Issue 反馈需求。
项目地址:
https://atomgit.com/openeuler/Conch往期文章
openEuler Conch沙箱引擎:如何用毫秒级速度给“闯祸”的小龙虾套上“海螺”壳:
mp.weixin.qq.com/s/cpSrWvow71tzlNr6rziOCg
【版权声明】Copyright © 2026 openEuler Community。本文由openEuler社区首发,欢迎遵照
CC-BY-SA 4.0协议规定转载。转载时敬请在正文注明并保留原文链接和作者信息。
【免责声明】本文仅代表作者本人观点,与本网站无关。本网站对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。本文仅供读者参考,由此产生的所有法律责任均由读者本人承担。
欢迎在此反馈您在社区体验中的任何建议或问题
知道了
openEuler是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持ARM、x86、RISC-V、LoongArch、PowerPC、SW-64等多样性计算架构
关于openEuler
新闻与资讯
获取与下载
支持与服务
互动与交流
贡献与成长
友情链接
木兰开源社区鲲鹏社区鹏城实验室InfoQ开源社中科微澜AuthingopenGauss昇思MindSporeopenUBMCopenFuyaoEbaina品牌隐私声明法律声明关于cookies遵循
木兰宽松许可证第2版(MulanPSL2)
版权所有 © 2026 openEuler 保留一切权利
京公网安备 11030102011597 号


openEuler小助手


openEuler公众号