microsandbox 多语言 SDK 示例实战指南:从零创建沙箱到网络策略与文件系统修补
Agent 沙箱虚拟化【免费下载链接】microsandbox fast branchable microVM for any workload项目地址https://gitcode.com/gh_mirrors/mon/microsandbox点击查看免费下载本文基于 examples/README.md 及其在各语言目录下的配套 README系统梳理 microsandbox 官方示例矩阵的完整使用方法如何在 TypeScript、Rust、Python、Go、Ruby 五种语言中创建沙箱、配置 rootfs 来源、打网络策略、注入密钥并修补启动前文件系统并结合示例源码逐段拆解关键 API 的实际用法。示例矩阵五语言、统一场景microsandbox 的examples/目录提供了同一组核心场景在五种语言下的可运行实现覆盖沙箱生命周期、三种 rootfs 来源OCI 镜像 / 本地目录绑定 / qcow2 块设备、启动前文件系统修补、PID 1 移交、卷管理、文件流式读取、指标订阅、交互式 Shell以及完整的网络能力面DNS 过滤、出网策略、端口发布、密钥注入、TLS 拦截。示例与语言的对应关系如下相对路径均以仓库根目录为起点语言目录说明文档TypeScriptexamples/typescriptexamples/typescript/README.mdRustexamples/rustexamples/rust/README.mdPythonexamples/pythonexamples/python/README.mdGosdk/go/examplessdk/go/examples/README.mdRubysdk/ruby/examplessdk/ruby/README.md核心示例列表继承自 examples/README.md示例说明lifecycle-convergence在线收敛live convergence、重启、销毁以及陈旧句柄stale-handle身份安全检查root-oci从 OCI 镜像如alpine创建沙箱root-bind从本地绑定挂载bind-mounted目录创建沙箱root-block从 qcow2 磁盘镜像创建沙箱rootfs-patch启动前文件系统修改文件写入、目录创建、行追加init-handoff将 guest 内的 PID 1 移交给 systemdvolume-named在多个沙箱之间共享的持久命名卷volume-disk将 raw / qcow2 磁盘镜像挂载到 guest 的任意路径fs-read-stream分块流式读取沙箱内的大文件metrics-stream订阅流式资源指标shell-attach使用 connect-or-create 的可复用交互式终端会话net-basicDNS 解析、HTTP 抓取、网卡状态查询net-dnsDNS 过滤——按域名和后缀拦截net-policy网络策略——public-only、allow-all、no-networknet-ports端口发布——将 guest 服务暴露在 host 端口上net-secrets密钥注入与 TLS 占位符替换net-tls按域名生成证书的 TLS 拦截各语言目录下的 README 还额外列出了该语言的专属示例例如 TypeScript / Rust / Python 目录中的cloud-backend云后端生命周期与实时日志与snapshot-fork对已停止沙箱做快照并从中启动新沙箱Go 目录则提供了粒度更细的一组示例包括basic、detached、disk、errors、filesystem、image-cache、metrics、network、patches、ports、secrets、snapshot-fork、streaming、tls、volumes等完整清单见 sdk/go/examples/README.md。前提条件运行时与示例资产运行任何示例前需要满足两类前提microsandbox 运行时可用。核心是msb守护进程与libkrunfw内核固件各语言的获取方式不同TypeScript通过microsandboxnpm 平台的 optional dependencies 自动安装或通过环境变量MSB_PATH指向一个可用的msb二进制要求 Node.js 22。Rust通过cargo build配合download-binariesfeature 构建获得或手动安装要求 Rust 2024 edition。Pythonmsb与libkrunfw打包在 wheel 中或位于~/.microsandbox/要求 Python 3.10。Go / RubySDK 内置或随包分发运行时。示例资产。root-bind与root-block两个示例依赖 git 子模块提供的 Alpine rootfs 与 qcow2 资产分别位于 examples/typescript/root-bind/rootfs-alpine 与 examples/typescript/root-block/qcow2-alpine 等位置需要先初始化子模块git submodule update --init --recursive创建语义replace、connectOrCreate 与严格创建examples/README.md 中有一段值得单独强调的约定它解释了所有示例中replace()/connectOrCreate的取舍大多数配置导向的示例会刻意替换其固定名称的沙箱replace 语义保证每次运行时实际生效的就是源码中展示的那套镜像、资源、挂载、网络与密钥配置而交互式示例shell-attach使用connect-or-create因为保留其工作区在多次运行之间有意义生成唯一名称的示例则使用严格创建strict creation。这个约定直接影响示例的可复现性如果你修改了示例源码中的配置后重新运行replace 语义确保新配置一定生效而不是连接到旧的、配置不一致的沙箱。阅读各语言示例源码时注意 TypeScript 的Sandbox.builder(...).replace().create()、Rust/Python 的connect_or_create等对应 API 的语义差异。代表示例源码深读root-oci从 OCI 镜像创建沙箱的最小闭环examples/typescript/root-oci/main.ts 展示了最小可用的沙箱创建与命令执行流程import { Sandbox } from microsandbox; await using sandbox await Sandbox.builder(oci-root) .image(alpine) .cpus(1) .memory(512) .replace() .create(); const output await sandbox.shell(echo Hello from microsandbox!); console.log(stdout:, output.stdout()); console.log(stderr:, output.stderr()); console.log(exit code:, output.code); const uname await sandbox.shell(uname -a); const osRelease await sandbox.shell(cat /etc/os-release);要点builder 第一个参数是沙箱的固定名称oci-root配合.replace()实现上文所述的替换语义.image(alpine)指定 OCI 镜像.cpus(1)/.memory(512)分别设定 vCPU 数与内存单位 MBawait using是 TypeScript 5.2 的显式资源管理语法作用域结束时自动释放沙箱shell()返回执行结果对象提供stdout()、stderr()、code三个访问器。rootfs-patch启动前的文件系统修补examples/typescript/rootfs-patch/main.ts 演示了在沙箱启动前对 rootfs 做声明式修改await using sandbox await Sandbox.builder(rootfs-patch) .image(alpine) .cpus(1) .memory(512) .patch((p) p .text(/etc/greeting.txt, Hello from a patched rootfs!\n) .text(/etc/motd, Welcome to a patched microsandbox.\n, { replace: true }) .mkdir(/app, { mode: 0o755 }) .text(/app/config.json, {version: 1.0, debug: true}, { mode: 0o644 }) .append(/etc/hosts, 127.0.0.1 myapp.local\n), ) .replace() .create();修补操作包含四种原语text()写入文件可用{ replace: true }覆盖已有文件可用{ mode }指定权限位、mkdir()建目录可带权限、append()追加行示例向/etc/hosts追加本地域名映射。示例随后用cat、grep、stat -c %a逐条验证了写入结果与/app目录的 0755 权限。这类修补适用于在标准 OCI 镜像基础上注入应用配置、挂载点或 host 映射而无需重新构建镜像。net-basic 与 net-dns基础网络与 DNS 过滤examples/typescript/net-basic/main.ts 在默认网络下验证三条基线能力nslookup验证 DNS 解析、wget验证 HTTP 出网、ip addr show eth0查看 guest 网卡状态。examples/typescript/net-dns/main.ts 则展示如何通过 builder 的network回调配置 egress 规则import { NetworkPolicy, Sandbox } from microsandbox; await using sandbox await Sandbox.builder(net-dns) .image(alpine) .cpus(1) .memory(512) .network((n) n.policy( NetworkPolicy.builder() .defaultAllow() .egress((e) e .denyDomain(blocked.example.com) .denyDomainSuffix(.evil.com), ), ), ) .replace() .create();策略语义是defaultAllow打底egress 层按精确域名denyDomain与后缀denyDomainSuffix做拒绝。示例通过nslookup对比了四类目标example.com放行应解析出地址、blocked.example.com精确拒绝输出 BLOCKED、anything.evil.com后缀拒绝、cloudflare.com无规则命中正常放行从而完整验证了过滤规则的命中与不命中路径。其余网络示例遵循相同结构net-policy组合 public-only / allow-all / no-network 三类策略net-ports将 guest 端口发布到 hostnet-secrets演示密钥占位符注入与 TLS 占位符替换net-tls配置按域生成证书的 TLS 拦截。更完整的网络行为说明可参考 docs/networking/overview.mdx 与 docs/networking/dns.mdx。分语言运行指南TypeScript每个示例都是独立的 Node.js 项目含各自的 package.json先安装依赖再启动cd examples/typescript/example npm install npm start例如运行root-ocicd examples/typescript/root-oci npm install npm startRust每个示例是工作区中一个独立的二进制 crate直接在仓库根目录执行cargo run -p oci-root cargo run -p net-basic cargo run -p fs-read-stream注意部分示例的 crate 名与目录名略有差异如root-oci目录对应oci-rootcrate完整对应表见 examples/rust/README.md。PythonPython SDK 需一次性构建源码位于 sdk/pythoncd sdk/python uv sync --group dev maturin develop --release之后从仓库根目录用 uv 运行任意示例uv run --project sdk/python python examples/python/root-oci/main.py uv run --project sdk/python python examples/python/net-basic/main.py uv run --project sdk/python python examples/python/fs-read-stream/main.pyGoGo 示例位于 sdk/go/examples从sdk/go目录直接运行cd sdk/go go run ./examples/basicRubyRuby 示例位于 sdk/ruby/examples目前提供了lifecycle_convergence.rb生命周期收敛与陈旧句柄安全检查运行方式见 sdk/ruby/README.md。示例选择建议想验证安装与 SDK 基本通路从root-oci或 Go 的basic开始要复现某条网络规则的实际效果按net-basic→net-dns→net-policy→net-ports→net-secrets/net-tls的顺序递进每个示例都自带 guest 内的验证命令运行后即可看到放行/拦截的对比输出需要给沙箱预置配置而不重建镜像参考rootfs-patch的text/mkdir/append三种原语组合关注并发与资源管理边界lifecycle-convergence覆盖重启、销毁与陈旧句柄身份安全并输出各阶段耗时指标适合作为 SDK 生命周期行为的对照基准。赞分享Agent 沙箱虚拟化【免费下载链接】microsandbox fast branchable microVM for any workload项目地址https://gitcode.com/gh_mirrors/mon/microsandbox点击查看免费下载相关推荐Cube Sandbox 完整示例基于 E2B SDK 的沙箱创建、代码执行、文件读写、暂停恢复与网络策略实战Cube Sandbox 完整示例基于 E2B SDK 的沙箱创建、代码执行、文件读写、暂停恢复与网络策略实战 本篇指南以仓库中 examples/opencAgent 沙箱虚拟化云原生人工智能后端容器运行时CubeSandbox Go SDK 实战指南从沙箱生命周期到 PTY、文件系统与 L7 出口策略CubeSandbox Go SDK 实战指南从沙箱生命周期到 PTY、文件系统与 L7 出口策略 本文以 CubeSandbox 的 Go SDK sdkAgent 沙箱虚拟化云原生人工智能后端容器运行时CubeSandbox Python SDK 实战指南沙箱创建、代码执行、网络策略与持久化卷全解析CubeSandbox Python SDK 实战指南沙箱创建、代码执行、网络策略与持久化卷全解析 cubesandbox 是 CubeSandbox 的官方Agent 沙箱虚拟化云原生人工智能后端容器运行时上一篇从源码到托盘XB1ControllerBatteryIndicator的XInput API应用详解下一篇tchMaterial-parser 电子课本下载工具3 步把平台教材 PDF 装进电脑创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考