run-dev
無料Build, test, format, and develop CubeSandbox components. Use when asked to build, compile, run tests, format code, or do development work on this project.
日本語の概要は準備中です。原文の説明を表示しています。
Cube Sandbox 安全沙箱执行技能。当需要安全执行 Python 代码、Shell 命令,或需要隔离环境运行不受信任的代码时使用。 适用场景: (1) 用户要求"在沙箱中执行代码"、"跑一段 Python"、"安全执行"、"隔离环境运行"; (2) 需要执行可能有副作用的代码(文件操作、网络请求、安装包等),希望通过沙箱隔离风险; (3) 需要读写沙箱内文件、挂载宿主机目录到沙箱; (4) 需要控制沙箱网络策略(完全断网、白名单、黑名单); (5) 需要暂停/恢复沙箱(保留内存快照以实现快速复用)。 Cube Sandbox 兼容 E2B SDK,通过环境变量 E2B_API_URL 指向 Cube 部署地址即可使用。
インストール方法を見るインストールする前に、エージェントに与えられる指示の中身を確認できます。
Cube Sandbox 是 Tencent 自研的安全沙箱基础设施,兼容 E2B SDK,为 AI Agent 提供隔离的代码执行环境。
运行前必须设置以下环境变量(可写入 .env 或 ~/.bashrc):
export CUBE_TEMPLATE_ID=<模板ID> # 沙箱镜像模板,必填
export E2B_API_URL=http://<host>:3000 # Cube API 地址(用于创建沙箱),必填
export E2B_API_KEY=e2b_000000 # SDK 非空校验用,填任意字符串
SSL_CERT_FILE 仅在使用 Cube 内置 cube.app 测试证书时需要配置。如果你使用自定义受信任域名,或通过 HTTP 访问沙箱,可跳过此配置。
使用 cube.app 测试证书时:
# 如果部署机器使用 mkcert,证书通常在以下位置
export SSL_CERT_FILE=/root/.local/share/mkcert/rootCA.pem
# 或者指定自定义证书路径
export SSL_CERT_FILE=/path/to/your/rootCA.pem
仅测试时可禁用证书校验(不推荐生产环境):
在 Python 代码中添加:
import ssl
import warnings
warnings.filterwarnings('ignore')
ssl._create_default_https_context = ssl._create_unverified_context
1. 安装 Python 3(如未安装)
# Ubuntu / Debian
sudo apt-get update && sudo apt-get install -y python3 python3-pip python3-venv
# macOS(使用 Homebrew)
brew install python3
2. 安装 e2b-code-interpreter
直接安装:
pip3 install e2b-code-interpreter
如果系统提示必须使用 venv(常见于 Ubuntu 22.04+、macOS Homebrew 环境):
python3 -m venv .venv
source .venv/bin/activate # Windows: .venv\Scripts\activate
pip install e2b-code-interpreter
使用 venv 后,后续所有
python/pip命令都需在激活 venv 的终端中执行,或用.venv/bin/python直接调用。
# 必需配置
export CUBE_TEMPLATE_ID="tpl-4cc15c28f7a04115a295c159"
export E2B_API_URL="http://127.0.0.1:3000"
export E2B_API_KEY="e2b_000000"
# 使用 cube.app 测试证书时才需要配置(自定义受信任域名或 HTTP 访问可不填)
export SSL_CERT_FILE="/Users/username/Downloads/rootCA.pem"
# 或
# export SSL_CERT_FILE=/root/.local/share/mkcert/rootCA.pem
49999-{sandboxID}.cube.app)。Cube 已内置 DNS 服务并预装了 cube.app 测试证书,开箱即可使用 HTTPS,无需额外配置证书。Host 头部须符合格式:<sandbox-service-port>-<sandboxId>-<domain>,例如 Host: 49999-abc123def456-cube.app。E2B_API_URL 指定的 Cube API Server 地址(默认端口 3000),此流量不经过 CubeProxy。cube.app 测试证书时需要配置,指向对应 CA 根证书。使用自定义受信任域名或通过 HTTP 访问沙箱时可不配置。cube.app,也可通过 CUBE_API_SANDBOX_DOMAIN 自定义。import os
import ssl
import warnings
# 方式一:配置证书路径(推荐)
os.environ['SSL_CERT_FILE'] = '/path/to/rootCA.pem'
# 方式二:禁用证书校验(仅测试)
# warnings.filterwarnings('ignore')
# ssl._create_default_https_context = ssl._create_unverified_context
from e2b_code_interpreter import Sandbox
with Sandbox.create(template=os.environ['CUBE_TEMPLATE_ID']) as sb:
result = sb.run_code("print('hello cube')")
print(result)
import os
import ssl
import warnings
# 配置 SSL(选择一种方式)
os.environ['SSL_CERT_FILE'] = '/path/to/rootCA.pem'
# 或禁用校验(仅测试)
# warnings.filterwarnings('ignore')
# ssl._create_default_https_context = ssl._create_unverified_context
from e2b_code_interpreter import Sandbox
with Sandbox.create(template=os.environ['CUBE_TEMPLATE_ID']) as sb:
r = sb.commands.run("echo hello")
print(r.stdout)
with Sandbox.create(template=template_id) as sb:
content = sb.files.read("/etc/hosts")
sb.files.write("/tmp/out.txt", "hello")
import json
with Sandbox.create(template=template_id, metadata={
"host-mount": json.dumps([
{"hostPath": "/tmp/data", "mountPath": "/mnt/data", "readOnly": False}
])
}) as sb:
...
# 完全断网
Sandbox.create(template=template_id, allow_internet_access=False)
# 白名单(只允许指定 CIDR)
Sandbox.create(template=template_id, allow_internet_access=False,
network={"allow_out": ["10.0.0.0/8"]})
# 黑名单(屏蔽指定 CIDR,其余放行)
Sandbox.create(template=template_id,
network={"deny_out": ["192.168.1.0/24"]})
with Sandbox.create(template=template_id) as sb:
sb.pause() # 保存内存快照,释放计算资源
sb.connect() # 恢复快照,继续执行
print(sb.get_info())
配置环境变量(必填):
CUBE_TEMPLATE_ID:沙箱模板 IDE2B_API_URL:HTTP API 地址(如 http://127.0.0.1:3000)E2B_API_KEY:任意字符串(SDK 校验用)配置 SSL 证书(按需):
cube.app 测试证书时:设置 SSL_CERT_FILE 指向 CA 根证书路径创建沙箱:
E2B_API_URL 创建沙箱执行代码:
49938-{sandboxID}.cube.app)清理资源:
with Sandbox.create(...) as sb: 确保沙箱用完自动销毁sandbox.kill()处理结果:
result.stdout、result.stderr、result.error 处理执行结果pause() + connect() 而非重新创建错误:[Errno 8] nodename nor servname provided, or not known
原因:SDK 无法解析沙箱返回的 domain(如 49999-{sandboxID}.cube.app)
首选方案:确认 Cube 内置 DNS 服务是否正常运行,或联系管理员检查 DNS 配置。
备用方案:手动写入 /etc/hosts
当 DNS 服务不可用时,可由 AI Agent 在创建沙箱后将所需域名临时写入 /etc/hosts,沙箱销毁后再清除。
原理:
create_sandbox 返回的 sandbox 信息中包含 sandbox_id 和 domain(如 cube.app)<port>-<sandboxId>-<domain>,对应 CubeProxy 所在宿主机 IP49999、49983),就为每个端口各写一条 hosts 记录操作示例(假设 CubeProxy 宿主机 IP 为 127.0.0.1,sandbox_id 为 abc123,domain 为 cube.app):
import subprocess
import os
PROXY_IP = "127.0.0.1" # CubeProxy 所在宿主机 IP
PORTS = [49999, 49983] # 需要访问的沙箱服务端口
def add_hosts(sandbox_id: str, domain: str, ports: list[int], ip: str):
"""创建沙箱后写入 /etc/hosts"""
entries = []
for port in ports:
hostname = f"{port}-{sandbox_id}-{domain}"
entries.append(f"{ip} {hostname} # cube-sandbox-{sandbox_id}")
lines = "\n".join(entries) + "\n"
# 需要 root 权限
subprocess.run(["sudo", "tee", "-a", "/etc/hosts"],
input=lines.encode(), check=True)
print(f"Added hosts entries:\n{lines}")
def remove_hosts(sandbox_id: str):
"""沙箱销毁后清除 /etc/hosts 中对应记录"""
subprocess.run(
["sudo", "sed", "-i", f"/# cube-sandbox-{sandbox_id}/d", "/etc/hosts"],
check=True
)
print(f"Removed hosts entries for sandbox {sandbox_id}")
# 使用示例
from e2b_code_interpreter import Sandbox
sb = Sandbox.create(template=os.environ['CUBE_TEMPLATE_ID'])
try:
add_hosts(sb.sandbox_id, "cube.app", PORTS, PROXY_IP)
result = sb.run_code("print('hello')")
print(result)
finally:
sb.kill()
remove_hosts(sb.sandbox_id)
⚠️ 写入
/etc/hosts需要 sudo 权限。沙箱异常退出时注意在finally块中确保清理,避免残留脏记录。
错误:SSL 证书校验失败
解决方案:
SSL_CERT_FILE 环境变量错误:API 返回 502
原因:Cube Sandbox 服务端不可用
解决方案:
references/api.mdreferences/examples.mdreferences/openclaw-integration.mdまだレビューはありません。使ってみた感想をお寄せください。
概要と使いどころ
Build, test, format, and develop CubeSandbox components. Use when asked to build, compile, run tests, format code, or do development work on this project.
日本語の概要は準備中です。原文の説明を表示しています。