跳转到内容
本站为社区维护的非官方中文翻译,与 Cloudflare, Inc. 无关联。本站不提供账户登录,请勿在任何非官方站点输入您的 Cloudflare 账户信息。官方文档:developers.cloudflare.com

Sandbox SDK 0.x API 对照

最后更新 查看 MarkdownAgent 设置

本页将 @cloudflare/sandbox 0.12 的每个公开 API 映射到其替换项:1.0 类、平台 API、另一个 Cloudflare 产品,或你编写的代码。某些 API 不再需要。有关迁移步骤,请参阅 从 Sandbox SDK 0.x 迁移。

在表格中,container 是 Durable Object 中的 this.ctx.container,files 是 Files 实例。类型 列使用这些值:

类型 含义
原生 直接调用 container 或其他平台 API。
包 使用 @cloudflare/sandbox 1.0 中的类,例如 Files。
模式 自己编写。当某页展示做法时,备注会链接到它。
产品 使用另一个 Cloudflare 产品。
已移除 不再需要。备注说明改为做什么。

类、标识与生命周期

有关步骤,请参阅 替换 Sandbox 类。这些 API 创建 sandbox 并控制其容器运行多久:

0.12 类型 替换项 备注
class X extends Sandbox, export { Sandbox } 已移除 class X extends DurableObject 从 container 构造该包中的类。
getSandbox(ns, id, options) 原生 env.NS.getByName(id) 自己验证名称。
normalizeId, setSandboxName() 已移除 自己将名称转为小写 仅在名称会成为主机名时需要。
sleepAfter, setSleepAfter() 原生 container.setInactivityTimeout(ms) 最多 6 小时。在 start() 之后调用,并在构造函数中再次调用。
keepAlive, setKeepAlive() 模式 在工作仍在进行时向容器发送请求的 alarm 请参阅 Sandbox 生命周期。
renewActivityTimeout() 原生 对 Durable Object 的任何请求 超时从 Durable Object 变为不活动时开始计算。
containerTimeouts, setContainerTimeouts() 已移除 AbortSignal
transport, setTransport(), SANDBOX_TRANSPORT 已移除 不需要 container.exec() 和 Files 直接到达容器。移除该设置。
labels, setLabels() 原生 container.start({ image, enableInternet, labels })
configure() 已移除 每次调用上的选项
setEnvVars()、类 envVars 原生 container.start({ env }) 或 container.exec(argv, { env }) exec() 不继承 start() 变量,PATH 除外。
类 entrypoint、enableInternet 原生 container.start({ entrypoint, enableInternet }) enableInternet 默认为 false。在 0.12 中默认为 true。
类 defaultPort、requiredPorts 原生 container.getTcpPort(port)
start() 原生 container.start({ image, enableInternet }) 不会等待容器。
startAndWaitForPorts(), waitForPort() 模式 重试 getTcpPort(port).fetch() 预览 Web 应用 展示了就绪检查。
stop(), destroy() 原生 container.signal(), container.destroy()
getState() 原生 container.running, container.monitor()
getContainerPlacementId() 模式 用 container.exec() 从 /proc/1/environ 读取 CLOUDFLARE_PLACEMENT_ID 容器的主进程有该变量。命令没有。
onStart, onStop, onError, onActivityExpired 模式 围绕 start() 和 monitor() 的代码
schedule(), listSchedules(), getSchedule(), deleteSchedules(), alarm() 原生 Durable Object alarms 每个对象一个 alarm。如果需要多个,请存储自己的调度。
fetch(), containerFetch() 原生 container.getTcpPort(port).fetch()

命令

有关步骤,请参阅 更改命令调用。这些 API 运行命令:

0.12 类型 替换项 备注
exec(command, options) 原生 container.exec(argv, options) output() 返回字节和 exitCode。success 是 exitCode === 0。
stream, onOutput, onComplete, onError 原生 读取 stdout 和 stderr,并 await exitCode
execStream() 原生 来自 container.exec(argv) 的 stdout 流 在响应上设置 Content-Type: text/event-stream。请参阅 流式输出。
timeout, signal 原生 在 timeout 下运行命令,或传入你清除的计时器上的 signal 退出代码 124 或 137 表示时间已到。请参阅替换超时设置。
cwd, env 原生 相同选项 传入 cwd: "/workspace" 和 env,这是 0.12 默认设置的。
encoding 已移除 自己解码字节
isExecResult(), isProcess(), isProcessStatus() 已移除 不需要 exec() 返回 ExecProcess。TypeScript 类型替代了这些守卫。

进程

有关步骤,请参阅 迁移后台进程。每个替换项都基于 运行后台进程 中的进程目录。这些 API 运行并管理后台进程:

0.12 类型 替换项 备注
startProcess() 模式 startProcess(id, argv),将进程 ID、输出和退出码写入文件 传入 cwd: "/workspace" 和 env,这是 0.12 设置的。请参阅 添加进程方法。
Process.getStatus(), getProcess(), listProcesses() 模式 status(),以及遍历进程目录的 listProcesses() 方法
getProcessLogs(), Process.getLogs() 模式 每个流的 logs()
streamProcessLogs() 模式 follow(),它流式传输 tail -F --pid 名为 stdout、stderr 和 exit 的事件,而不是 LogEvent 对象。
Process.waitForLog() 模式 waitForLog(),用 grep -E 轮询日志文件 转义 0.12 字符串模式。请参阅 等待输出或退出。
Process.waitForExit() 模式 调用 status() 直到进程结束的 waitForExit() 方法
Process.waitForPort() 模式 重试 getTcpPort(port).fetch() 预览 Web 应用 展示了就绪检查。
Process.kill(), killProcess() 模式 stop(),向进程组发送 SIGTERM 0.12 会在 5 秒后发送 SIGKILL。
killAllProcesses() 模式 对 listProcesses() 返回的每个进程调用 stop()
cleanupCompletedProcesses(), autoCleanup 已移除 不需要 两者在 0.12 中都不做任何事。用 rm -rf 删除已结束的进程目录。
onStart, onOutput, onError 模式 startProcess()、follow() 之后的代码,以及抛出或返回 false 的启动
onExit 模式 每分钟检查每个进程的 alarm 请参阅 替换回调。

会话

有关步骤,请参阅 替换会话。这些 API 在命令之间保留状态:

0.12 类型 替换项 备注
createSession(), getSession(), deleteSession() 已移除 每次调用上的 cwd 和 env
enableDefaultSession 已移除 每次调用上的 cwd 和 env cd 和 export 不会带到下一次。
isolation 已移除 单独的 sandbox
commandTimeoutMs 已移除 每条命令中的 timeout

ExecutionSession 方法的映射方式与顶层方法相同。

文件

有关步骤,请参阅 更改文件调用。这些 API 读写文件:

0.12 类型 替换项 备注
readFile(), readFileStream() 包 files.readFile() 返回一个 Response。使用 .text()、.arrayBuffer() 或响应正文;正文包含文件字节,而不是服务器发送事件。
writeFile() 包 files.writeFile() 先用 mkdir() 创建缺失的父目录。传入字节而不是 base64。
mkdir() 包 files.mkdir()
deleteFile() 包 files.remove() 带有 recursive: true 时也会删除目录。
renameFile(), moveFile() 包 files.rename() 跨文件系统操作会失败并返回 EXDEV。与 mv 不同,它不会将源移动到现有目录中。
listFiles() 包 files.readDirectory() 一层。包含隐藏条目。
listFiles({ recursive: true }) 模式 遍历 readDirectory() 请参阅 列出文件。
exists() 包 files.stat() 捕获带有 ENOENT 的 SandboxFileError。
文件元数据 包 files.stat(), files.lstat()
watch(), checkChanges() 模式 通过 container.exec() 运行 inotifywait -m 请参阅 替换文件监视。
collectFile(), streamFile() 已移除 Response 正文
parseSSEStream(), responseToAsyncIterable(), asyncIterableToSSEStream() 已移除 ExecProcess 上的 ReadableStream 对象 要将输出作为 server-sent events 发送到浏览器,请参阅 流式命令输出。
WriteFileResult、ReadFileResult 和其他结果类型 已移除 void、Response 或 SandboxFileStat 失败会抛出 SandboxFileError。

端口、预览 URL 与隧道

有关步骤,请参阅 迁移预览 URL 和 迁移隧道。这些 API 使容器中的服务器可从外部访问:

0.12 类型 替换项 备注
exposePort(), unexposePort(), getExposedPorts(), isPortExposed() 模式 基于 0.12 portTokens 键的方法 0.12 签发的 URL 继续有效。请参阅 替换预览调用。
validatePortToken() 模式 对已存储令牌的恒定时间检查
proxyToSandbox(), SandboxEnv 模式 将 <port>-<name>-<token> 主机名路由到 getByName()
wsConnect(request, port) 原生 container.getTcpPort(port).fetch(request) 桥接 WebSocket 以保持容器运行。
tunnels.get(port), tunnels.list(), tunnels.destroy(port) 模式 运行 cloudflared 的 openTunnel()、listTunnels() 和 closeTunnel() 需要 enableInternet: true。请参阅 从 Durable Object 运行 cloudflared。
tunnels.get(port, { name }) 模式 基于 0.12 tunnels 键的 resumeTunnel() 和 deleteTunnel() 0.12 创建的主机名继续有效。请参阅 保留 0.12 创建的命名隧道。
CLOUDFLARE_API_TOKEN 模式 相同的密钥 在你运行或删除 0.12 创建的命名隧道期间保留它。
CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_TUNNEL_ACCOUNT_ID, CLOUDFLARE_ZONE_ID 已移除 不需要 代码读取 0.12 存储的账户和 zone。

终端

有关步骤,请参阅 迁移浏览器终端。这些 API 将浏览器终端连接到 shell:

0.12 类型 替换项 备注
terminal(), session.terminal() 模式 getByName(name).fetch(request),以及用 exec(argv, { pty }) 附加 tmux 客户端的 handler 在 /workspace 中用 env 启动 shell,这是 0.12 设置的。请参阅 将终端附加到 tmux。
proxyTerminal() 模式 相同的 fetch() 调用,会话在查询字符串中 请参阅 转发 WebSocket。
终端打开的会话的 cwd 和 env 模式 tmux new-session 的 -c 和 -e 选项 tmux 在创建会话时应用它们。
shell 选项 模式 tmux 命令中会话名称之后的命令
@cloudflare/sandbox/xterm, SandboxAddon, SandboxAddonOptions, ConnectionState, ConnectionTarget 模式 带有页面会重新打开的 WebSocket 的 xterm.js 发送 {"type":"ready"},以便切换前加载的页面继续有效。请参阅 替换 SandboxAddon。
终端重连与回放 模式 tmux 保留会话并重绘屏幕 更早的输出留在 tmux 历史中。请参阅 终端上的变化。

出站网络与 Git

有关步骤,请参阅 迁移出站规则。这些 API 控制容器中的代码发出的请求:

0.12 类型 替换项 备注
allowedHosts, deniedHosts, outbound, outboundByHost, outboundHandlers, outboundProxies, outboundProxy 模式 按 0.12 顺序应用规则的 WorkerEntrypoint handler 接受 (request, env, params)。请参阅 在 entrypoint 中应用规则。
读取 Workers 绑定的 outboundByHost handler 模式 每个主机名一个 WorkerEntrypoint 请参阅 从容器访问 Workers 绑定。
interceptHttps 原生 对每个 sandbox 调用 container.interceptOutboundHttps("*", fetcher) 将证书添加到系统捆绑包,并设置 NODE_EXTRA_CA_CERTS 和 REQUESTS_CA_BUNDLE。0.12 仅在 interceptHttps = true 时检查 HTTPS。请参阅 请求方面的变化。
setAllowedHosts(), setDeniedHosts(), allowHost(), denyHost(), removeAllowedHost(), removeDeniedHost(), setOutboundHandler(), setOutboundByHost(), setOutboundByHosts(), removeOutboundByHost() 模式 更新 OUTBOUND_CONFIGURATION 键并再次注册 entrypoint 的方法 0.12 存储的规则继续生效。请参阅 替换运行时 setter。
ContainerProxy 已移除 导出你自己的 entrypoint 从 Worker 的导出中移除它。
gitCheckout() 模式 在 /workspace 中 exec() git clone --filter=blob:none 请参阅 替换 gitCheckout()。对于私有仓库,请参阅 克隆私有仓库。

存储桶挂载

有关步骤,请参阅 迁移存储桶挂载。这些 API 在容器中挂载对象存储:

0.12 类型 替换项 备注
带 S3 端点的 mountBucket() 包 S3Mount.mount(),并从 Worker 导出 S3Gateway 凭据留在 Worker 中。请参阅 挂载存储桶。
带 R2 绑定的 mountBucket() 包 使用 R2 S3 端点的 S3Mount.mount() 需要该存储桶的 R2 API 令牌。1.0 无法通过绑定挂载。
prefix, readOnly, s3fsOptions 包 keyPrefix, access, s3fsOptions keyPrefix 没有前导 /,access 是必填的,s3fsOptions 是对象。
credentials、R2_* 和 AWS_* 变量 包 source.credentials 不从环境读取。
credentialProxy, provider 已移除 不需要 S3Gateway 为每个请求签名。S3Mount 始终设置 nomixupload,而 0.12 仅对 R2 添加它。
localBucket 包 在 wrangler dev 下配合本地兼容 S3 的服务器使用 S3Mount 需要 Wrangler 4.137.0 或更高版本。请参阅 替换 localBucket。
unmountBucket() 包 S3Mount.unmount() 当有进程使用该路径时抛出 S3_MOUNT_BUSY。
BucketMountError, BucketUnmountError, InvalidMountConfigError, MissingCredentialsError, S3FSMountError 包 SandboxS3MountError 无效请求会抛出 TypeError。
与出站规则一起的挂载 模式 在 interceptAllOutboundHttp() 之前挂载 在 catch-all intercept 之后注册的挂载会失败。请参阅 如果你已迁移出站规则。

备份

有关步骤,请参阅 迁移备份。这些 API 保存并恢复目录:

0.12 类型 替换项 备注
createBackup(), restoreBackup() 包 DirectoryBackup 的 backup() 和 restore() 你的 Durable Object 存储记录。对于整个文件系统,使用 container.snapshotContainer()。
name, gitignore 包 同名的 DirectoryBackup 选项 gitignore 不需要镜像中有 git。
excludes 包 exclude .gitignore 语法。以 **/ 开头的模式可匹配任意深度,与 0.12 的模式行为相同。
ttl 模式 存储在存储桶中、备份旁边的过期时间 0.12 拒绝过期恢复并保留对象。
multipart, localBucket, compression 已移除 不需要 每个备份都分片通过 R2 绑定。
BACKUP_BUCKET 原生 R2 绑定 将其名称作为 DirectoryBackup 的 binding 传入。
BACKUP_BUCKET_NAME、BACKUP_BUCKET_ENDPOINT、R2 访问密钥 已移除 R2 绑定 容器永远不会持有存储桶凭据。
BackupNotFoundError 包 代码为 BACKUP_NOT_FOUND 的 SandboxBackupError
BackupExpiredError 模式 你的过期检查抛出的错误
InvalidBackupConfigError 已移除 TypeError
BackupCreateError, BackupRestoreError 包 SandboxFileError 或 SandboxBackupError 请参阅 DirectoryBackup 错误。
0.12 制作的备份 模式 对 backups/<id>/data.sqsh 运行 unsquashfs,然后 backup() 请参阅 转换 0.12 创建的备份。

代码解释器与子路径包

这些 API 来自代码解释器和该包的子路径导出:

0.12 类型 替换项 备注
runCode(), createCodeContext(), listCodeContexts(), deleteCodeContext(), CodeInterpreter 模式 每个上下文一个 IPython kernel,或用于 JavaScript 的 Dynamic Worker 请参阅 替换代码解释器。
runCodeStream(), onStdout, onStderr, onResult 模式 带有 python3 - 及其 stdout 的命令 请参阅 替换流式输出。
@cloudflare/sandbox/opencode, createOpencode(), createOpencodeServer(), OpencodeOptions, OpencodeResult, OpencodeServer, OpencodeStartupError 模式 opencode serve 和 OpenCode SDK 客户端 请参阅 启动 OpenCode 服务器。
proxyToOpencode(), proxyToOpencodeServer() 模式 Durable Object 中的 fetch(),它转发到服务器端口 请参阅 启动 OpenCode 服务器。
@cloudflare/sandbox/openai, Shell, Editor, CommandResult, FileOperationResult 模式 你自己的 Shell 和 Editor @openai/agents 中的 ShellResult 和 ApplyPatchResult 替换结果类型。请参阅 为 OpenAI agent 提供 shell 和编辑器。
@cloudflare/sandbox/bridge, bridge(), resolveWorkspacePath(), shellQuote(), BridgeConfig, BridgeEnv, WorkerHandlers 模式 你自己的 Worker 路由 请参阅 替换 bridge。
WarmPool, WarmPoolConfig, PoolStats 已移除 在请求需要时启动每个 sandbox 请参阅 移除 WarmPool。

镜像

0.12 发布了供 Sandbox 类构建的容器镜像:

0.12 类型 替换项 备注
cloudflare/sandbox、-python、-opencode 和 -musl 镜像 已移除 你自己的 linux/amd64 镜像 如果使用 Files、S3Mount 或 DirectoryBackup,请将 sandbox-shim 复制到镜像中。请参阅要求。
带有 USER root 的 docker:dind-rootless 模式 带有 --ip-forward=false 的 docker:dind 请参阅 在 sandbox 内运行 Docker。

错误与客户端

这些 API 报告失败并与容器通信:

0.12 类型 替换项 备注
ContainerUnavailableError, OperationInterruptedError, RPCTransportError, SessionTerminatedError 已移除 来自 container 的原生错误 不包装。
ProcessExitedBeforeReadyError, ProcessReadyTimeoutError 模式 你的就绪检查结果 请参阅 预览 Web 应用。
isPlatformTransientError(), isDurableObjectCodeUpdateReset() 已移除 error.retryable 和 error.overloaded 当 retryable 为 true 时,用新 stub 重试幂等调用;当 overloaded 为 true 时永不重试。该包不重试。请参阅 错误处理。
SandboxClient, BackupClient, CommandClient, FileClient, GitClient, InterpreterClient, PortClient, ProcessClient, UtilityClient 已移除 container 和 Files 从你的 Durable Object 调用它们。
SANDBOX_LOG_LEVEL, SANDBOX_LOG_FORMAT 已移除 你自己的日志 该包不记录日志。从 Worker 记录,并在 Workers Logs 中读取。

类型

这些 0.12 类型描述前面各节中方法的选项和结果。每种类型随其方法一起迁移:

0.12 类型 替换项 备注
SandboxOptions, SandboxTransport, ISandbox, ContainerStub 已移除 你的类 请参阅 类、标识与生命周期。
BaseExecOptions, ExecOptions, StreamOptions, ExecResult, ExecEvent, ExecuteRequest, CommandExecuteResponse, CommandsResponse 原生 ContainerExecOptions, ExecProcess, ExecOutput wrangler types 会生成它们。
PtyOptions 原生 ContainerExecPtyOptions 作为 pty 传给 container.exec()。shell 放在命令中。
SessionOptions, SessionRequest, CreateSessionRequest, CreateSessionResponse, DeleteSessionRequest, DeleteSessionResponse 已移除 每次调用上的 cwd 和 env
ProcessOptions, ProcessStatus, ProcessStartResult, ProcessListResult, ProcessInfoResult, ProcessKillResult, ProcessLogsResult, ProcessCleanupResult, StartProcessRequest, WaitForLogResult, WaitForPortOptions 模式 你的进程方法的类型 请参阅 迁移后台进程。
ReadFileRequest, WriteFileRequest, FileOperationRequest, MkdirRequest, ListFilesOptions 包 FileOperationOptions, MkdirOptions, RemoveOptions, FileContent
FileMetadata, FileChunk, FileStreamEvent 已移除 files.readFile() 返回的 Response
WatchOptions, FileWatchSSEEvent, CheckChangesOptions, CheckChangesResult 模式 你的 inotifywait 读取器返回的事件 请参阅 替换文件监视。
TunnelOptions, TunnelInfo, QuickTunnelInfo, NamedTunnelInfo 模式 你的隧道方法的类型 请参阅 迁移隧道。
GitCheckoutRequest, GitCheckoutResult 模式 你的 git clone 命令的参数和输出 请参阅 替换 gitCheckout()。
MountBucketOptions, RemoteMountBucketOptions, LocalMountBucketOptions, BucketCredentials, BucketProvider 包 S3MountRequest
BackupOptions, DirectoryBackup, RestoreBackupResult 包 DirectoryBackupOptions, DirectoryBackupRecord, DirectoryRestoreOptions DirectoryBackupRecord 增加 size、name、sha256 和 format,并去掉 localBucket。restore() 不返回任何内容。在 1.0 中,DirectoryBackup 是保存和恢复备份的类。
CodeContext, CreateContextOptions, RunCodeOptions, ExecutionCallbacks, ExecutionResult 模式 你的 kernel 的 CodeContext 和 Execution 类型 请参阅 替换代码解释器。
ContainerUnavailableContext, ContainerUnavailableReason, OperationInterruptedContext, OperationInterruptedReason, RPCTransportContext, RPCTransportErrorKind 已移除 不需要 它们的错误已移除。
SandboxClientOptions, RequestConfig, ResponseHandler, BaseApiResponse, ErrorResponse, PingResponse 已移除 不需要 客户端已移除。

这篇文档对您有帮助吗?