- Published on
Microsandbox 体验:构建安全隔离的轻量级代码执行环境
- Authors

- Name
- Shoukai Huang
Microsandbox 介绍
在现代软件开发中,安全地运行不可信代码是一个巨大的挑战。传统的解决方案——如容器、虚拟机或云沙盒——往往需要在速度、隔离性或控制力之间做出权衡。Microsandbox 的出现正是为了解决这一难题,它提供了一个硬件隔离且启动迅速的执行环境,旨在融合各方优势,为不可信工作负载提供理想的运行平台。
Microsandbox 优势
Microsandbox 结合了虚拟机的高隔离性与容器的轻量级特性,其核心优势包括:
- 绝对安全:基于独立内核的真正虚拟机隔离,确保运行环境的安全性。
- 极速启动:启动时间低于 200 毫秒,远快于传统虚拟机的 10 秒以上启动时间。
- 完全掌控:支持完全的自托管基础设施,用户拥有对数据的完全控制权。
- 兼容 OCI:可与标准容器镜像无缝配合使用。
- AI-Ready:内置 MCP (Model Context Protocol) 服务器,能够实现与人工智能工具的无缝集成。
Microsandbox 架构
Microsandbox 采用典型的 C/S (客户端/服务端) 架构,确保了不可信代码的安全隔离执行。其架构主要由以下部分组成:
客户端 (Client Side):
- 业务逻辑 (Business Logic):您的应用程序核心逻辑。
- Microsandbox SDK:作为连接桥梁,负责将需要执行的不可信代码进行封装,并安全地发送给服务端。
服务端 (Server Side):
- Microsandbox Server:负责接收来自 SDK 的请求。
- 分发中心 (Branching Hub):根据请求类型(如 Python、Node.js),将任务动态分发到对应的执行环境。
- MicroVMs (微虚拟机):真正的执行单元。每个任务都在独立的 MicroVM(如 Python 环境、Node 环境)中运行,实现了硬件级别的安全隔离。
此架构确保了主业务逻辑与不可信代码执行环境的完全解耦,提供了极致的安全性与灵活性。

Microsandbox 体验
接下来,我们将通过实际操作来体验 Microsandbox 的安装与使用。
安装 Microsandbox
步骤 1:安装命令行工具
安装 Microsandbox 最简单的方法是使用官方提供的安装脚本:
curl -sSL https://get.microsandbox.dev | sh
该命令将下载并安装 msb 命令行工具到您的系统中。
步骤 2:下载镜像与生成密钥
下载 Python 运行环境镜像:
msb pull microsandbox/python
创建服务端密钥(有效期设置为 720 小时):
msb server keygen --expire 720h
步骤 3:启动服务器
以开发模式启动 Microsandbox 服务器:
msb server start --dev
如果是部署在远程服务器上,可以使用以下命令指定主机和端口:
msb server start --host 0.0.0.0 --port 5555
值得一提的是,Microsandbox 服务器同时也是一个 MCP 服务器,这意味着它可以开箱即用,直接与 Claude 和其他支持 MCP 的 AI 工具配合使用,极大地扩展了其应用场景。
快速示例
Microsandbox 提供了多种编程语言的 SDK。以下是一个使用 Python SDK 的快速示例。
首先,添加依赖:
uv add microsandbox "python-dotenv"
配置 .env 文件:
MSB_API_KEY=msb_...
MSB_SERVER_URL=http://IP:5555
编写测试代码 main.py:
import asyncio
import os
from dotenv import load_dotenv
from microsandbox import PythonSandbox
# Load environment variables
load_dotenv()
async def verify_hello_world():
# Load configuration
server_url = os.getenv("MSB_SERVER_URL")
api_key = os.getenv("MSB_API_KEY")
# Explicitly ensure they are in os.environ
os.environ["MSB_SERVER_URL"] = server_url
os.environ["MSB_API_KEY"] = api_key
print(f"Connecting to {server_url}...")
try:
async with asyncio.timeout(30):
# Create sandbox
async with PythonSandbox.create(name="hello-world-test", api_key=api_key) as sb:
print("✅ Connected!")
# Execute Python code
print("Running: print('Hello World')")
exec_result = await sb.run("print('Hello World')")
# Correctly await the error check
error_msg = await exec_result.error()
if error_msg:
print(f"❌ Execution Error: {error_msg}")
else:
output = await exec_result.output()
print(f"✅ Output received: {output.strip()}")
except TimeoutError:
print("❌ Error: Connection timed out.")
except Exception as e:
print(f"❌ Error: {e}")
if __name__ == "__main__":
asyncio.run(verify_hello_world())
运行代码:
uv run main.py
预期输出如下:
Connecting to http://10.146.9.82:5555...
✅ Connected!
Running: print('Hello World')
✅ Output received: Hello World
进一步体验
在实际应用中,我们可能会遇到更复杂的场景,例如需要在沙盒中处理文件,但是 MCP 和 SDK 中没有上传文件的参数和方式。

由于沙盒环境无法直接访问宿主机文件系统,我们需要通过特殊方式进行文件传输。针对沙盒无法访问外网或需要上传本地大文件的情况,可以采用 Base64 编码分块写入 的方案。
实现原理:
- 本地读取:在本地读取文件内容并转换为 Base64 字符串。
- 分块切割:将长字符串切分为较小的块(例如 50KB)。
- 追加写入:循环调用沙盒的
python -c命令,将解码后的二进制数据以追加模式(ab)写入到沙盒内的目标文件中。
核心代码参考:
# ... inside upload loop ...
for i, chunk in enumerate(chunks):
# 使用 python -c 执行单行脚本:解码 base64 块并以追加模式(ab)写入文件
code = f"import base64; open('{remote_filename}', 'ab').write(base64.b64decode('{chunk}'))"
res = await sb.command.run("python", ["-c", code])
if res.exit_code != 0:
error = await res.error()
raise Exception(f"Failed to upload chunk {i}: {error}")
总结
回顾 Microsandbox 的使用体验,它确实在安全性和启动速度上表现出色。然而,我们也必须注意到项目文档中的重要提示:
Note: This project is still experimental. Expect breaking changes, missing features, and rough edges. (该项目仍处于实验阶段。请预料到会有破坏性改动、缺失功能和粗糙的边角。)
基于此,建议在生产环境中使用前务必谨慎评估。如果您正在寻找更成熟的自托管方案,可以考虑进一步验证 Daytona 等其他产品。不过值得注意的是,Daytona 的开源部署文档同样标注了“暂不适合生产环境使用”的警示。
在选择技术方案时,务必根据实际业务需求和风险承受能力进行权衡。
