创建沙箱时可以通过 envs(Python)或 envs(TypeScript)参数注入自定义环境变量,供沙箱内的进程读取。本文介绍如何设置自定义环境变量、环境变量的合并规则以及系统预设环境变量。
前提条件
已安装 E2B SDK(Python
pip install e2b==2.26.0;TypeScript:npm i e2b@2.28.0)已获取 E2B API Key,并通过环境变量
E2B_API_KEY设置
功能说明
通过 envs 参数传入的键值对会作为环境变量注入沙箱。沙箱内所有进程(包括通过 commands.run() 执行的命令)均可读取这些变量。
环境变量合并规则:
容器操作系统基础环境变量(PATH 等)
模板预设的环境变量
用户通过
envs传入的环境变量(优先级最高,同名时覆盖前两层)
代码示例
运行前,先在终端配置环境变量(将 e2b_xxxxx 替换为您的实际 API Key):
export E2B_API_URL="https://api.cn-beijing.e2b.fc.aliyuncs.com"
export E2B_DOMAIN="cn-beijing.e2b.fc.aliyuncs.com"
export E2B_API_KEY="e2b_xxxxx"Python 示例
from e2b import Sandbox
sandbox = None
try:
sandbox = Sandbox.create(
template="base",
api_key=E2B_API_KEY,
timeout=300,
envs={
"APP_MODE": "sandbox",
"TASK_ID": "task-001",
},
**E2B_CONN_OPTS,
)
result = sandbox.commands.run("echo $APP_MODE && echo $TASK_ID")
print(result.stdout)
finally:
if sandbox is not None:
sandbox.kill()TypeScript 示例
import { Sandbox } from 'e2b';
const sandbox = await Sandbox.create({
template: 'base',
apiKey: process.env.E2B_API_KEY!,
timeoutMs: 300_000,
envs: {
APP_MODE: 'sandbox',
TASK_ID: 'task-001',
},
});
try {
const result = await sandbox.commands.run('echo $APP_MODE && echo $TASK_ID');
console.log(result.stdout);
} finally {
await sandbox.kill();
}预期输出:
sandbox
task-001命令级环境变量覆盖
除创建时设置全局环境变量外,还可以在执行单个命令时传入环境变量,仅在该命令执行期间生效。命令级变量的优先级高于创建时的全局变量——同名变量以命令级为准。
from e2b import Sandbox
sandbox = Sandbox.create(
api_key=E2B_API_KEY,
envs={'APP_ENV': 'production', 'DB_HOST': 'db.example.com'}
)
# 后续命令仍使用全局值
result = sandbox.commands.run('echo $APP_ENV')
print(result.stdout) # production
sandbox.kill()import { Sandbox } from 'e2b';
const sandbox = await Sandbox.create({
apiKey: process.env.E2B_API_KEY!,
envs: { APP_ENV: 'production' },
});
// Command-level override
const result = await sandbox.commands.run('echo $APP_ENV', {
envs: { APP_ENV: 'staging' },
});
console.log(result.stdout); // staging
await sandbox.kill();环境变量优先级:命令级/PTY 级 envs > 创建时全局 envs > 模板预设 > 操作系统基础变量。每个命令进程拥有独立的环境副本,并发命令间互不影响。
系统预设环境变量
除用户自定义的环境变量外,系统会自动注入以下环境变量:
变量名 | 值 | 说明 |
| "true" | 标识当前运行环境为云沙箱 |
| 沙箱实例 ID | 当前沙箱的唯一标识符 |
使用建议
不要通过
envs传递长期密钥(如数据库密码、云服务 AccessKey)。生产环境建议使用短期凭证、RAM Role 或专门的密钥注入机制环境变量的 key 和 value 均为字符串类型,数值类型需自行转换
用户设置的环境变量会覆盖同名的模板预设变量,但不会覆盖系统预设变量(
E2B_SANDBOX、E2B_SANDBOX_ID)
PTY 会话环境变量
在创建伪终端(PTY)会话时,也可以通过 envs 参数注入环境变量,在该终端会话生命周期内有效。
Python 示例:
from e2b.sandbox.commands.command_handle import PtySize
pty_handle = sandbox.pty.create(
PtySize(rows=24, cols=80),
envs={'TERM': 'vt100', 'MY_VAR': 'pty_value'}
)特殊字符支持
环境变量的 value 支持以下特殊字符,无需额外转义:
等号(
=)空格
双引号
换行符(
\n)&符号中文字符
Emoji
空字符串(变量存在但值为空)