ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Microsandbox:本地 microVM 沙箱的 CLI、SDK 与分支快照实战指南

Microsandbox:本地 microVM 沙箱的 CLI、SDK 与分支快照实战指南 Agent 沙箱虚拟化【免费下载链接】microsandbox fast branchable microVM for any workload项目地址https://gitcode.com/gh_mirrors/mon/microsandbox点击查看免费下载Microsandbox 是一个为不可信工作负载AI Agent、用户代码、插件、CI 任务、爬虫与自动化脚本提供快速本地 microVM 隔离的项目。本文将完整覆盖官方 README 的安装、CLI 使用、SDK 集成与典型场景并结合仓库源码剖析其配置加载、沙箱生命周期与网络/密钥策略的底层实现帮助你从“会敲命令”进阶到“理解每个参数如何生效”。一、项目定位与核心特性Microsandbox 在本地启动微型虚拟机microVM来运行不可信工作负载AI agents、用户代码、插件、CI 任务、开发环境、爬虫和自动化。当前仓库版本为 0.7.2见 Cargo.toml仍处于 beta 阶段——官方明确提示“可能存在破坏性变更、缺失功能和粗糙边缘”使用前请了解这一点。README 列出的核心特性及其实现落点如下特性说明仓库中的实现位置硬件隔离用微型虚拟机实现硬件级隔离基于 libkrun VMMCargo.toml 锁定msb_krun 0.1.39分支与快照可 fork 运行中的沙箱保存运行态并在之后恢复msb branchcrates/cli/lib/commands/branch.rs、msb snapcrates/cli/lib/commands/snapshot.rs、快照子系统sdk/rust/lib/snapshot跨平台支持 Linux、macOS、Windows平台要求见下文OCI 兼容可直接运行 Docker Hub、GHCR 或任意 OCI 仓库中的标准容器镜像镜像拉取与缓存crates/image/lib/pull.rs类 Docker 工作流熟悉的 image / command / shell / volume 工作流CLI 命令组crates/cli/lib/commands极速启动平均启动时间低于 100 毫秒README 脚注指 M1 机器上的 guest 启动时间—可嵌入在代码中直接生成 VM无需配置服务器或常驻 daemon各语言 SDKsdk 目录无法泄露的密钥密钥永不进入 VM在出站请求中即时替换网络引擎crates/network/lib/engine、crates/agentd/lib/tls.rs长时运行支持 detached 模式的长生命周期会话生命周期命令start/stop/waitcrates/cli/lib/commandsAgent 就绪AI 编码 Agent 可通过 Agent Skills 与 MCP server 自建沙箱独立仓库README 中链接运行环境要求macOSApple SiliconLinux启用 KVMWindows启用 WHPWindows Hypervisor Platform。二、安装CLI 与 SDK2.1 安装 CLI安装脚本macOS / Linuxcurl -fsSL https://install.microsandbox.dev | shWindowsPowerShellirm https://install.microsandbox.dev/windows | iex也支持其他包管理器brew install superradcompany/tap/microsandbox # Homebrew npm i -g microsandbox # npm uv tool install microsandbox # uv cargo install microsandbox # cargo安装完成后第一个沙箱一行即起msb run ubuntu安装脚本会把运行时写入~/.microsandbox/并在~/.local/bin/建立命令链接不修改 shell 启动文件见 docs/cli/overview.mdx。建议用msb doctor检查本机虚拟化支持KVM、/dev/kvm权限等。2.2 安装 SDKSDK 让你在应用代码中直接创建并控制沙箱Sandbox.builder(...).create()会以子进程方式启动一个 microVM不需要任何基础设施。npm i microsandbox # TypeScript cargo add microsandbox # Rust uv add microsandbox # Python go get github.com/superradcompany/microsandbox/sdk/go # Go从工作区结构看Cargo.tomlsdk/rust、sdk/node-ts、sdk/python、sdk/go/native都是本仓库的 workspace 成员packages/agent-client、packages/control-client、packages/protocol-client则是宿主与 guest agent 之间通信的协议客户端层。三、CLI 实战msb命令体系msbCLI 提供管理沙箱、快照、镜像和卷的完整接口。3.1 运行一条命令msb run python -- python3 -c print(Hello from a microVM!)不带--name的msb run创建临时沙箱命令结束后自动删除命名沙箱则持久存在docs/cli/overview.mdx。命令形式可互换msb run、msb sandbox run、msb sbx run完全等价。3.2 命名沙箱创建、执行、fork、快照、生命周期# 创建并启动一个命名沙箱 msb create --name app python # 执行命令 msb exec app -- python -c import this msb exec app -- curl https://example.com # Fork 一个运行中的沙箱 msb branch app --name experiment msb exec experiment -- python -c print(An independent copy!) # 现在保存稍后恢复 msb snap create --sandbox app --full -o saved.msb msb snap restore saved.msb --name restored # 生命周期 msb stop app msb start app msb rm app从源码结构看msb branch的实现在 crates/cli/lib/commands/branch.rsSDK 侧的分支与批量分支逻辑位于 sdk/rust/lib/sandbox/branch.rs 与 branch_batch.rs——“从同一个活着的时刻”直接派生多个子沙箱这正是 README 所称的 “Branch Snapshot”。省略--full时快照只保存磁盘状态用于冷启动--full则捕获完整内存态docs/cli/overview.mdx。3.3 镜像管理msb pull python # 拉取镜像 msb image ls # 列出已缓存镜像 msb image rm python # 删除镜像首次create/run时若镜像未缓存会自动拉取之后复用缓存。镜像子系统在 crates/image 中涵盖 OCI 拉取、ext4/EROFS 根文件系统、快照层与 registry 逻辑。3.4 配置文件--confmsb run --conf sandbox.yaml -- octocat# sandbox.yaml image: python:3.12 memory: 64M network: allow: - api.github.com scripts: octocat: | python - PY import urllib.request request urllib.request.Request( https://api.github.com/octocat, headers{User-Agent: microsandbox-example}, ) with urllib.request.urlopen(request) as response: print(response.read().decode()) PY运行--conf sandbox.yaml -- octocat时octocat是配置中scripts定义的一个命名脚本——README 示例即演示了“YAML 声明脚本 网络白名单 命名脚本”的组合。源码层实现配置加载逻辑集中在 crates/cli/lib/sandbox_config.rs。几个值得注意的工程细节严格稀疏配置SandboxConfigInput带deny_unknown_fieldssandbox_config.rs未声明的字段直接报错配置即数据而非模板语言安全解析预算配置文件上限 16 MiBYAML 解析器禁用锚点/别名/合并键/自定义 tag重复键报错sandbox_config.rs、sandbox_config.rs环境插值仅支持${NAME}形式当插值出现在secrets的value字段且是精确的${NAME}时会被记录为$msb_env宿主侧引用而非明文拷贝sandbox_config.rs位置参数优先image字段最终在“命令行位置参数 配置文件”的优先级下解析sandbox_config.rs。配置文件字段远比 README 示例丰富完整的 image / 资源 / 运行时 / 挂载 / 网络 / secrets / scripts schema 见 docs/cli/configuration.mdx其中还定义了--net-conf、--resource-conf、--runtime-conf、--fs-conf、--secret-conf、--script-conf等分域配置文件与 sandbox_config.rs 中的SandboxConfigKind枚举一一对应。3.5 把沙箱安装成 shell 命令msb install ubuntu # 安装 ubuntu 沙箱为 ubuntu 命令 ubuntu # 打开一个跑着 Ubuntu 的 microVM msb uninstall ubuntu # 卸载适合“常用某系统 shell”的场景一条命令进入隔离环境无需记住msb参数。3.6 状态与检视msb ls # 列出所有沙箱 msb ps app # 查看沙箱状态 msb inspect app # 详细信息 msb metrics app # 实时 CPU/内存/网络指标CLI 还内置三档探索方式msb --help快速帮助msb --tree完整命令树与描述msb command --tree特定命令子树。3.7 默认值速查创建沙箱最少只需要名字和镜像其余项均有默认值docs/sandboxes/overview.mdx选项默认说明image必填OCI 镜像、本地 rootfs 路径或磁盘镜像cpus1虚拟 CPU 上限memory512guest 内存上限MiBworkdir镜像默认命令默认工作目录shell/bin/shshell()使用的 shellnetworkpublic-only网络策略与发布端口scripts空挂载到/.msb/scripts/的命名脚本注意cpus和memory是上限而非预留——guest 内存按页面实际触达分配。四、SDK五语言示例SDK 的核心模型统一构造 builder →create()启动 microVM →exec()执行 → 读取输出 → 停止。4.1 TypeScriptimport { Sandbox } from microsandbox; await using sandbox await Sandbox.builder(my-sandbox) .image(python) .cpus(1) .memory(512) .create(); const output await sandbox.exec(python, [ -c, print(Hello from a microVM!), ]); console.log(output.stdout());4.2 Rustuse microsandbox::Sandbox; #[tokio::main] async fn main() - Result(), Boxdyn std::error::Error { let sandbox Sandbox::builder(my-sandbox) .image(python) .cpus(1) .memory(512) .create() .await?; let output sandbox .exec(python, [-c, print(Hello from a microVM!)]) .await?; println!({}, output.stdout()?); sandbox.stop().await?; Ok(()) }4.3 Pythonimport asyncio from microsandbox import Sandbox async def main(): sandbox await Sandbox.create( my-sandbox, imagepython, cpus1, memory512, ) output await sandbox.exec(python, [-c, print(Hello from a microVM!)]) print(output.stdout_text) await sandbox.stop() asyncio.run(main())4.4 Gopackage main import ( context fmt log microsandbox github.com/superradcompany/microsandbox/sdk/go ) func main() { ctx : context.Background() // 首次运行时把 microsandbox runtime 下载到 ~/.microsandbox/ if _, err : microsandbox.EnsureRuntime(ctx, microsandbox.RuntimeConfig{}, microsandbox.InstallOptions{}); err ! nil { log.Fatal(err) } sandbox, err : microsandbox.CreateSandbox(ctx, my-sandbox, microsandbox.WithImage(python), microsandbox.WithCPUs(1), microsandbox.WithMemory(512), ) if err ! nil { log.Fatal(err) } defer sandbox.Stop(ctx) output, err : sandbox.Exec(ctx, python, []string{-c, print(Hello from a microVM!)}) if err ! nil { log.Fatal(err) } fmt.Println(output.Stdout()) }4.5 Ruby含网络策略与密钥require microsandbox sandbox Microsandbox::Sandbox.create( my-sandbox, image: python, cpus: 1, memory: 512, network: { allowed_hosts: [api.openai.com], allowed_ports: [443] }, secrets: [{ env: OPENAI_API_KEY, value: ENV.fetch(OPENAI_API_KEY), allowed_host: api.openai.com }] ) output sandbox.exec(python, [-c, print(Hello from a microVM!)]) puts output.stdout sandbox.stopRuby 示例展示了两个高级能力出站网络白名单allowed_hosts/allowed_ports和密钥注入secrets。仓库内对应示例可在 examples/rust/net-basic、examples/rust/net-secrets、examples/rust/net-policy 等 Rust 示例目录中找到README 的 Ruby 示例本身即演示了 allowed-host 与 secret 绑定安装与生命周期细节见 sdk/ruby/README.md。首次create()会按需拉取镜像网络状况下耗时可能较长后续运行复用本地缓存。五、create()背后发生了什么一次Sandbox.builder(...).create()的完整链路docs/getting-started/quickstart.mdx拉取镜像若未缓存——由 crates/image 的 OCI 拉取器完成组装写时复制CoW文件系统——沙箱内改动不触碰基础镜像层多个沙箱可共享已缓存的基础层以子进程方式启动 microVM附带你配置的资源上限启动 guest agent——宿主 SDK/CLI 通过它执行命令、传输数据。其中exec走的是宿主-guest 命令通道不是 SSH、也不走沙箱网络。该通道的构成帧化消息走virtio-consoleguest 内由agentdPID 1应答crates/agentd/lib/serial.rs、crates/protocol/lib/control。从安全视角docs/security/isolation.mdx控制通道是宿主驱动的guest 只能应答请求、流式返回输出无法反向通过通道在宿主执行命令或建立连接通道无需加密认证virtio 设备只绑定一个 VM被攻破的 guest 至多把任意帧发给“自己的”宿主进程而宿主把每一帧都当作不可信输入处理设备面即攻击面guest 只能通过virtio-console、virtio-net、virtio-fs、virtio-blk、virtio-rng这组固定设备触碰宿主没有通用透传。六、隔离模型为什么 microVM 适合不可信负载边界是硬件虚拟化不是 Linux namespace每个沙箱有独立 Linux 内核由 microsandbox 基于 libkrunfw 提供、独立内存与 vCPULinux 走 KVM、macOS 走 Hypervisor.framework经 libkrun VMM 调度。依赖共享内核的容器逃逸手法在这里没有可攻击的共享内核宿主进程无需 rootLinux 下只需访问/dev/kvm通常加入kvm组无 setuid、无提权 capabilitymacOS 上二进制以 hypervisor entitlement 代码签名guest 内默认宽松是故意的agentd以 root 运行、工作负载默认 root保证真实镜像含 init、sudo、Docker-in-Docker原样工作——因为 VM 边界才是隔离主体如需 guest 内纵深防御可启用restricted 安全画像no_new_privs、移除 mount-admin capability、强制用户挂载nosuid,nodev与sudo/DinD 不兼容msb create python --name worker --user app --security restricted跨沙箱零共享沙箱之间不共享内核、可写文件系统层、网络命名空间和进程树互相通信只能通过你显式建立的手段共享命名卷、发布端口等。七、典型场景README 给出的实践方向配套文档均在仓库 docs/examples 下examples/目录提供 Python/Rust/TypeScript 三语言可运行示例Docker in a Sandbox不触碰宿主 daemon 运行 Dockerdocs/examples/docker/docker-in-sandbox.mdxOpenCode给编码 agent 一个隔离项目工作区docs/examples/agents/opencode.mdxBrowser Use / Playwright在 microVM 内运行 AI 浏览器 agent 或无头浏览器任务docs/examples/browser-automationWarm Workers快照一套工具链秒级启动干净 workerdocs/examples/sandboxing/warm-workers.mdxMigration Rehearsal演练数据库迁移后恢复基线docs/examples/data/migration-rehearsal.mdxGitHub Actions Runner每个自托管任务跑在一次性 microVMdocs/examples/ci-cd/github-actions-runner.mdxDocuments to PDF在全新离线 worker 里转换不可信文档docs/examples/file-processing/libreoffice-pdf.mdx。examples/目录还提供 rootfs 变体示例root-bind宿主目录作根文件系统、root-blockqcow2 磁盘镜像启动、root-oci标准 OCI 镜像、rootfs-patch启动前打补丁、volume-disk 与 volume-named磁盘卷与命名卷、snapshot-fork快照与 fork。八、面向 AI Agent 的集成Agent Skills把 microsandbox 使用方式教给任意 AI 编码 agentClaude Code、Cursor、Codex、Gemini CLI、GitHub Copilot 等npx skills add superradcompany/skillsMCP Server为 MCP 兼容 agent 提供结构化工具调用覆盖沙箱生命周期、命令执行、文件系统访问、卷与监控# Claude Code claude mcp add --transport stdio microsandbox -- npx -y microsandbox-mcp九、深入文档与贡献仓库内文档自成体系按主题组织CLI 参考docs/cli总览、沙箱/快照/镜像/卷/SSH 命令、配置文件 schema沙箱概念docs/sandboxes生命周期、命令、文件系统、快照、SSH、指标、调优网络与安全docs/networking、docs/securitySDK 参考docs/sdkTypeScript / Rust / Python / Go 各语言 API排障docs/troubleshootingLinux / macOS / Windows 分平台。贡献指南见 CONTRIBUTING.md构建、测试与发布流程见 DEVELOPMENT.md。项目基于 Apache License 2.0 开源LICENSE特别致谢 libkrun 锁定smoltcp 0.14两个上游项目。赞分享Agent 沙箱虚拟化【免费下载链接】microsandbox fast branchable microVM for any workload项目地址https://gitcode.com/gh_mirrors/mon/microsandbox点击查看免费下载相关推荐Agent Substrate 本地运行 microVM 沙箱KVM 环境搭建与 guest 内存快照验证实战指南Agent Substrate 本地运行 microVM 沙箱KVM 环境搭建与 guest 内存快照验证实战指南 导读 Agent Substrate本仓人工智能AI AgentAgent 沙箱云原生容器运行时零信任Flue 沙箱适配器实战:为 Agent 接入 boxd microVM 沙箱Flue 沙箱适配器实战:为 Agent 接入 boxd microVM 沙箱 本篇基于 Flue 仓库中的 boxd 沙箱适配器蓝图 blueprints/s人工智能大模型AI AgentAgent 框架工具调用Agent 沙箱MCP ClientsCubeSandbox 代码沙箱快速上手基于 E2B SDK 从零创建、运行与治理 MicroVM 沙箱CubeSandbox 代码沙箱快速上手基于 E2B SDK 从零创建、运行与治理 MicroVM 沙箱 本指南围绕仓库中 examples/code sanAgent 沙箱虚拟化云原生人工智能后端容器运行时上一篇2025年Windows字体自定义终极指南用noMeiryoUI打造专属视觉体验下一篇Mastra AWS Nova Sonic 语音集成基于 Bedrock 双向流的实时语音 Agent 开发指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表