快速开始

更新时间:
复制 MD 格式

模板将稳定的系统依赖、语言运行时、工具链和基础代码固化为可复用的运行环境。构建一次后,可以基于同一模板创建多个相互独立的沙箱;更新模板不会影响已经运行中的沙箱。

用户数据、临时文件和频繁变化的业务状态应在沙箱运行时写入。密钥、Token 等敏感凭证不要写入模板,应在创建沙箱时通过环境变量注入。

前提条件

  • 准备一个云沙箱可访问的 E2B 兼容镜像。首次体验可使用 构建自定义镜像模板 中的官方镜像。

  • 获取连接参数 E2B_API_KEYE2B_API_URLE2B_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();
}

后续阅读