模板将稳定的系统依赖、语言运行时、工具链和基础代码固化为可复用的运行环境。构建一次后,可以基于同一模板创建多个相互独立的沙箱;更新模板不会影响已经运行中的沙箱。
用户数据、临时文件和频繁变化的业务状态应在沙箱运行时写入。密钥、Token 等敏感凭证不要写入模板,应在创建沙箱时通过环境变量注入。
前提条件
准备一个云沙箱可访问的 E2B 兼容镜像。首次体验可使用 构建自定义镜像模板 中的官方镜像。
获取连接参数
E2B_API_KEY、E2B_API_URL和E2B_DOMAIN。SDK 会自动读取这三个环境变量,下方示例无需在方法调用中显式传入。参数详情见 E2B SDK 接入参数说明。
安装 Python SDK:
python3 -m venv .venv
source .venv/bin/activate
pip install e2b==2.31.0 python-dotenv创建 .env 文件:
E2B_API_KEY=e2b_xxx
FROM_IMAGE="fc-e2b-registry.cn-beijing.cr.aliyuncs.com/runtime/code-interpreter-v1:v0.0.31"
E2B_API_URL=https://api.cn-beijing.e2b.fc.aliyuncs.com
E2B_DOMAIN=cn-beijing.e2b.fc.aliyuncs.com构建模板并创建沙箱
下面从镜像构建模板,并使用返回的模板 ID 创建沙箱。
import os
import time
from dotenv import load_dotenv
from e2b import Sandbox, Template, default_build_logger
load_dotenv()
# SDK 自动读取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 环境变量。
# 从镜像定义并构建模板。
build = Template.build(
Template().from_image(os.environ["FROM_IMAGE"]),
name=f"template-{int(time.time())}",
cpu_count=2,
memory_mb=2048,
on_build_logs=default_build_logger(),
)
# 使用刚构建的模板创建沙箱。
sandbox = Sandbox.create(template=build.template_id, timeout=900)
try:
print(f"template_id: {build.template_id}")
print(f"sandbox_id: {sandbox.sandbox_id}")
finally:
sandbox.kill()TypeScript 示例:
import { Sandbox, Template, defaultBuildLogger } from "e2b";
// SDK 自动读取 E2B_API_KEY / E2B_API_URL / E2B_DOMAIN 环境变量。
// 从镜像定义并构建模板。
const build = await Template.build(
Template().fromImage(process.env.FROM_IMAGE),
`template-${Date.now()}`,
{ cpuCount: 2, memoryMB: 2048, onBuildLogs: defaultBuildLogger() },
);
// 使用刚构建的模板创建沙箱。
const sandbox = await Sandbox.create(build.templateId, { timeoutMs: 900_000 });
try {
console.log(`template_id: ${build.templateId}`);
console.log(`sandbox_id: ${sandbox.sandboxId}`);
} finally {
await sandbox.kill();
}后续阅读
该文章对您有帮助吗?