自定义环境变量

更新时间:
复制 MD 格式

创建沙箱时可以通过 envs(Python)或 envs(TypeScript)参数注入自定义环境变量,供沙箱内的进程读取。本文介绍如何设置自定义环境变量、环境变量的合并规则以及系统预设环境变量。

前提条件

  • 已安装 E2B SDK(Pythonpip install e2b==2.26.0 ;TypeScript:npm i e2b@2.28.0

  • 已获取 E2B API Key,并通过环境变量 E2B_API_KEY 设置

功能说明

通过 envs 参数传入的键值对会作为环境变量注入沙箱。沙箱内所有进程(包括通过 commands.run() 执行的命令)均可读取这些变量。

环境变量合并规则

  1. 容器操作系统基础环境变量(PATH 等)

  2. 模板预设的环境变量

  3. 用户通过 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 > 模板预设 > 操作系统基础变量。每个命令进程拥有独立的环境副本,并发命令间互不影响。

系统预设环境变量

除用户自定义的环境变量外,系统会自动注入以下环境变量:

变量名

说明

E2B_SANDBOX

"true"

标识当前运行环境为云沙箱

E2B_SANDBOX_ID

沙箱实例 ID

当前沙箱的唯一标识符

使用建议

  • 不要通过 envs 传递长期密钥(如数据库密码、云服务 AccessKey)。生产环境建议使用短期凭证、RAM Role 或专门的密钥注入机制

  • 环境变量的 key 和 value 均为字符串类型,数值类型需自行转换

  • 用户设置的环境变量会覆盖同名的模板预设变量,但不会覆盖系统预设变量(E2B_SANDBOXE2B_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

  • 空字符串(变量存在但值为空)