容器 E06:Wasm 模块不是 Linux 容器进程
OCI 的制品分发与执行合约是不同层。10 的 descriptor/manifest可以组织非传统 rootfs 制品,但一个 Wasm 模块如何运行,依赖选定 Wasm runtime、WASI 版本与宿主接口,而不是把 .wasm 文件放进 OCI layer 就自动变成 Linux ELF 进程。
对比的是同一功能,不是同一执行模型
Linux probe-app 用 Python HTTP server,经内核的 socket 系统调用处理请求;WASI 提供的系统接口与实现能力随版本、runtime 而变。若要比较相同功能,必须选定能提供所需网络和文件能力的具体实现,明确编译目标和运行参数,再通过 OCI 制品把模块与运行配置交给支持该制品的 runtime;传统 runc 不会因此执行 Wasm 模块。正例在独立 VM 选定一个明确支持该 WASI 功能的 runtime,实现与 probe-app 可对照的简单响应;反例去掉相应 WASI 能力或选用不支持的 runtime,记录制品能被下载但无法执行的错误。版本与具体源码调用路径须按安装后实际情况核查。
版本冻结与最小功能定义、Linux 侧探针源码只提供对照输入;当前无 WASI runtime、模块编译器或 OCI runtime,所有 Wasm 构建/运行 `NOT_RUN`,不能将布局生成器成功当 Wasm 兼容通过。| 现象 | 检查 | 不可推出 |
|---|---|---|
| OCI blob 能下载 | media type 与执行 runtime | Wasm 已运行 |
| 同一 HTTP 功能 | 运行时提供的网络接口 | 两端都是 Linux 进程 |
| 模块启动失败 | WASI/宿主能力版本 | 镜像摘要必然错误 |
练习
- 先预测传统 runc 接到只有 Wasm 模块的 OCI 制品会怎样,在专用 VM 区分内容准备、执行 runtime 选择和 ABI 错误。
- 对一份简单状态读写功能,比较选定 WASI 版本是否支持必要文件和网络接口,并记录不能实现的部分,而非伪造同功能性能数据。
先修:10:OCI 制品、18:任务。下一篇:E07:懒加载。
系列总目录:从进程隔离到运行时与编排。
参考资料
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.






