You need to enable JavaScript to run this app.
文档中心
容器服务

容器服务

复制全文
下载 pdf
基于 E2B 协议管理
SDK 开发指南
复制全文
下载 pdf
SDK 开发指南
本文主要介绍使用 E2B 协议管理 VCI Agent Sandbox 的 SDK 开发指南。​
E2B 兼容概况​
​
分类​
API​
说明​
兼容性​
兼容性说明​
Sandbox 生命周期​
create​
创建 VCI Agent Sandbox。​
部分兼容​
不支持网络访问控制、原地变配、自动暂停。​
Sandbox 生命周期​
get_info​
获取 VCI Agent Sandbox 实例信息。​
完全兼容​
无​
Sandbox 生命周期​
list​
列出所有 VCI Agent Sandbox 信息。​
完全兼容​
无​
Sandbox 生命周期​
delete​
删除 VCI Agent Sandbox 实例。​
完全兼容​
无​
Sandbox 生命周期​
connect​
连接 VCI Agent Sandbox 实例。​
完全兼容​
无​
Sandbox 生命周期​
pause​
暂停 VCI Agent Sandbox 实例。该接口为异步接口,接口调用成功时,Sandbox 对应的底层 Pod 成功回收, 但快照仍在创建中。​
完全兼容​
无​
Sandbox 生命周期​
resume​
恢复 VCI Agent Sandbox 实例,自动基于最近一次暂停时生成的可写层快照恢复数据。​
完全兼容​
无​
文件系统​
write​
主容器需要运行e2b-code-interpreter组件。可在 Template 的initcontainer中查看e2b-code-interpreter组件的定义。​
完全兼容​
除了在 Template 中的initcontainer字段下定义,也可通过注解agent.sandbox.io/enable-envd-injection: "true"实现,VCI 将自动注入envd程序。​
文件操作​
read​
​
完全兼容​
​
代码执行​
run_code​
​
完全兼容​
​
命令执行​
commands.run​
​
完全兼容​
​
API Key 管理​
-​
由于 E2B code interpreter SDK 不包含 API Key 管理能力,通常通过 E2B Web 控制台、E2B CLI 或 HTTP 方式操作。VCI Agent Sandbox 主要提供 HTTP 调用方式,包括 POST、DELETE、GET。​
不涉及​
无​
Template 管理​
post_templates​
在构建完整的 SandboxTemplate 结构后创建模板。​
完全兼容​
无​
​
requests.delete​
删除模板。原生 E2B SDK 中无该接口,建议按需通过 API 操作模板。​
不涉及​
无​
​
requests.patch​
更新模板。原生 E2B SDK 中无该接口,建议按需通过 API 操作模板。​
不涉及​
无​
​
requests.get​
获取单个模板详情。原生 E2B SDK 中无该接口,建议按需通过 API 操作模板。​
不涉及​
无​
快照管理​
create_snapshot​
创建快照。​
完全兼容​
无​
​
requests.delete​
删除快照。​
不兼容​
无​
​
list_snapshot​
查询快照列表,仅返回已制作完成且可用的快照。​
完全兼容​
无​
监控管理​
get_metrics​
获取 Sandbox 的运行监控数据。​
部分兼容​
不支持指定起止时间。​
​
E2B SDK 说明​
E2B 官网提供多种 SDK 接入,其中包括e2b和e2b_code_interpreter等接入方式。本文场景中推荐您使用e2b_code_interpreter,该方式预装了可用于数据分析的 Python 库。​
​
pip install e2b-code-interpreter==2.4.1 e2b==2.10.2 anthropic python-dotenv​
​
本文代码示例中均以 Python 为例,更多语言示例,请参见 E2B 官网。​
E2B 标准能力​
Sandbox 生命周期​
​
创建 Sandbox
查询 Sandbox
删除 Sandbox
暂停 Sandbox
恢复 Sandbox
​
请求 body 参数​
​
参数名​
类型​
是否必选​
说明​
template​
string​
是​
创建 Sandbox 时使用的 Template ID。​
timeout​
int​
否​
Sandbox 的存活时间:​
  • 单位:秒​
  • 默认值:300​
metadata​
Dict[str, str]​
否​
需要传递给 Sandbox 的额外注解信息。​
secure​
bool​
否​
Sandbox 是否开启envd鉴权:​
  • True:为envd配置鉴权信息,配置成功后访问envd执行文件操作、命令操作时,需要传递鉴权信息。​
  • False:不开启envd鉴权。​
​
返回参数​
​
参数名​
类型​
说明​
SandboxInfo​
Class​
包含 Sandbox 基本信息的类。子参数说明,见下方 SandboxInfo。​
​
SandboxInfo​
​
参数名​
类型​
说明​
template_id​
string​
创建 Sandbox 时使用的 Template ID。​
sandbox_id​
string​
Sandbox 实例的 ID。​
envd_version​
string​
使用的envd版本。​
_envd_access_token​
string​
envd的鉴权信息。​
domain​
string​
E2B API 的访问域名。​
​
使用示例​
​
def create_sandbox(template):​
sbx = Sandbox.create(template=template, secure=True)​
print("created sandbox_id=", sbx.sandbox_id)​
return sbx​
​
​
文件系统​
​
上传文件
下载文件
​
使用示例​
​
def upload_file(sbx):​
with open("./test.txt", "rb") as file:​
sbx.files.write("/test.txt", file)​
​
​
代码执行​
​
代码执行
​
使用示例​
​
def run_code(sbx):​
sbx.run_code("print('hello world')")​
​
​
命令执行​
​
命令执行
​
使用示例​
​
def run_command(sbx):​
sbx.commands.run('echo hello')​
​
​
API Key 管理​
VCI 提供 POST、DELETE、GET 等 HTTP 调用方式。​
​
创建 API Key
删除 API Key
获取 API Key 列表
​
使用示例​
​
# API Key 配置​
API_BASE_URL = os.getenv("API_BASE_URL", "your.domain")​
ADMIN_API_KEY = os.getenv("ADMIN_API_KEY", "sk-local-test-123456")​
​
# API 请求头​
headers = {​
"X-API-KEY": ADMIN_API_KEY,​
"Content-Type": "application/json"​
}​
​
def create_api_key(name):​
"""Create a new API key"""​
url = f"{API_BASE_URL}/api-keys"​
payload = {"name": name}​
​
print(f"Creating API key: {name}")​
response = requests.post(url, headers=headers, json=payload)​
​
​
模板(Template)管理​
​
创建模版
删除模板
更新模板
获取单个模版详情
​
使用示例​
​
from e2b.connection_config import ConnectionConfig​
from e2b.api.client_sync import get_api_client​
from e2b.api.client.api.templates import post_templates​
from e2b.api.client.models import TemplateBuildRequest​
​
"""​
使用官方 E2B SDK 创建 SandboxTemplate​
​
Args:​
api_base_url: E2B API 服务基础地址​
api_key: API 认证密钥​
template_name: 模版名称​
namespace: Kubernetes 命名空间(默认 default)​
template_spec: 可选的模版 spec 配置​
"""​
# 2. 配置模版 spec​
if template_spec is None:​
template_spec = {​
"podTemplate": {​
"metadata": {​
"annotations": {​
"agent.sandbox.io/snapshot-max-num": "2",​
​
"vci.vke.volcengine.com/enable-auto-create-imc": "true",​
"vci.vke.volcengine.com/preferred-instance-family": "vci.u1,vci.n3i",​
"vci.volcengine.com/persistent-container": "true",​
"vci.volcengine.com/tls-enable": "false",​
"vci.volcengine.com/usable-disk-capacity": "40",​
"vke.volcengine.com/burst-to-vci": "enforce"​
}​
},​
"spec": {​
"containers": [​
{​
"env": [​
{"name": "ENVD_DIR", "value": "/mnt/envd"},​
{"name": "PORT", "value": "49999"}​
],​
"image": "cr-cn-guilin-boe.volces.com/vke/code-interpreter:v0.1.0",​
"lifecycle": {​
"postStart": {​
"exec": {​
"command": ["/bin/bash", "-c", "/mnt/envd/envd-run.sh"]​
}​
}​
},​
"name": "main",​
"resources": {​
"limits": {"cpu": "2", "memory": "4Gi"},​
"requests": {"cpu": "2", "memory": "4Gi"}​
},​
"volumeMounts": [​
{"mountPath": "/mnt/envd", "name": "envd-volume"}​
]​
}​
],​
"initContainers": [​
{​
"command": ["sh", "/workspace/entrypoint.sh"],​
"env": [​
{"name": "ENVD_DIR", "value": "/mnt/envd"},​
{"name": "__IGNORE_RESOURCE__", "value": "true"}​
],​
"image": "helm-cr-cn-guilin-boe.cr.volces.com/vke/agent-runtime:v0.0.4",​
"name": "runtime",​
"restartPolicy": "Always",​
"volumeMounts": [​
{"mountPath": "/mnt/envd", "name": "envd-volume"}​
]​
}​
],​
"terminationGracePeriodSeconds": 1,​
"volumes": [{"emptyDir": {}, "name": "envd-volume"}]​
}​
}​
}​
​
# 3. 构建完整的 SandboxTemplate 结构​
sandbox_template = {​
"apiVersion": "extensions.agents.x-k8s.io/v1alpha1",​
"kind": "SandboxTemplate",​
"metadata": {​
"name": template_name,​
"namespace": namespace​
},​
"spec": template_spec​
}​
​
# 4. 初始化 E2B SDK 连接配置​
try:​
config = ConnectionConfig(​
api_key=api_key,​
api_url=api_base_url​
)​
​
# 获取 API 客户端​
api_client = get_api_client(​
config,​
require_api_key=True,​
require_access_token=False​
)​
print(f" ✅ SDK 连接初始化成功!")​
except Exception as e:​
print(f" ❌ SDK 连接初始化失败: {e}")​
return None​
​
# 5. 构建 SDK 请求对象​
# 必填,TemplateBuildRequest 必须传入 dockerfile 字段,即使自定义 server 未使用 dockerfile 字段,也需传入空值​
build_request = TemplateBuildRequest(​
dockerfile=""​
)​
​
build_request["namespace"] = namespace​
build_request["sandboxTemplate"] = sandbox_template​
​
print(f" ✅ 请求对象构建成功!")​
​
# 6. 调用官方 SDK 接口创建模版​
# 使用 sync_detailed 可以获取完整响应信息​
response = post_templates.sync_detailed(​
body=build_request,​
client=api_client​
)​
​
​
快照管理​
​
创建快照
删除快照
查询快照列表
​
返回参数​
​
参数名​
类型​
说明​
SandboxInfo​
Class​
包含 Sandbox 基本信息的类。子参数说明,见下方 SandboxInfo。​
​
SandboxInfo​
​
参数名​
类型​
说明​
snapshotId​
string​
快照的 ID。​
​
使用示例​
​
def create_snapshot(sandbox_id: str) -> None:​
sbx = Sandbox.connect(sandbox_id)​
snap_shot_info = sbx.create_snapshot()​
​
​
监控管理​
​
获取监控
​
返回参数​
​
参数名​
类型​
说明​
List[SandboxMetrics]​
List​
包含 Sandbox 基本信息的列表。子参数说明,见下方 SandboxMetrics。​
​
SandboxMetrics​
​
参数名​
类型​
说明​
cpu_count​
Integer​
Sandbox 的 CPU 总核数。​
cpu_used_pct​
Float​
Sandbox 的 CPU 使用率。​
disk_total​
Integer​
Sandbox 的磁盘总量。​
disk_used​
Integer​
Sandbox 已经使用的磁盘大小。​
mem_total​
Integer​
Sandbox 的内存总量。​
mem_used​
Integer​
Sandbox 已经使用的内存大小。​
timestamp​
DataTime​
指标时间戳。​
​
使用示例​
​
def metrics_operation(sbx):​
res = sbx.get_metrics()​
print(res)​
​
​
最近更新时间:2026.08.05 15:29:52
这个页面对您有帮助吗?
有用
有用
无用
无用