通过扩展基础运行时镜像,使用自己的软件包、工具和配置自定义沙箱 container 镜像。
Sandbox SDK 提供多种基于 Ubuntu 的镜像变体。选择适合你用例的镜像:
| 镜像 | 标签后缀 | 用例 |
|---|---|---|
| Default | (无) | 适用于 JavaScript/TypeScript 工作负载的精简镜像 |
| Python | -python |
数据科学、机器学习、Python 代码执行 |
| OpenCode | -opencode |
使用 OpenCode CLI 的 AI 编码 Agent |
# Default - lean, no Python
FROM docker.io/cloudflare/sandbox:0.7.0
# Python - includes Python 3.11 + data science packages
FROM docker.io/cloudflare/sandbox:0.7.0-python
# OpenCode - includes OpenCode CLI for AI coding
FROM docker.io/cloudflare/sandbox:0.7.0-opencode默认镜像针对 JavaScript 和 TypeScript 工作负载进行了优化:
- Ubuntu 22.04 LTS 基础
- Node.js 20 LTS 与 npm
- Bun 1.x(JavaScript/TypeScript 运行时)
- 系统工具:curl、wget、git、jq、zip、unzip、file、procps、ca-certificates
-python 变体包含默认镜像中的全部内容,另加:
- 带 pip 和 venv 的 Python 3.11
- 预装软件包:matplotlib、numpy、pandas、ipython
-opencode 变体包含默认镜像中的全部内容,另加:
- 用于 AI 驱动编码 Agent 的 OpenCode CLI ↗
在项目根目录创建 Dockerfile:
FROM docker.io/cloudflare/sandbox:0.7.0-python
# Install additional Python packages
RUN pip install --no-cache-dir \
scikit-learn==1.3.0 \
tensorflow==2.13.0 \
transformers==4.30.0
# Install Node.js packages globally
RUN npm install -g typescript ts-node prettier
# Install system packages
RUN apt-get update && apt-get install -y \
postgresql-client \
redis-tools \
&& rm -rf /var/lib/apt/lists/*更新 wrangler.jsonc 以引用你的 Dockerfile:
{
"containers": [
{
"class_name": "Sandbox",
"image": "./Dockerfile",
},
],
}当你运行 wrangler dev 或 wrangler deploy 时,Wrangler 会自动构建 Docker 镜像并将其推送到 Cloudflare 的 container registry。你无需手动构建或发布镜像。
你可以使用独立二进制文件为任何 Docker 镜像添加沙箱能力。此方法允许你使用现有镜像,而无需依赖 Cloudflare 基础镜像:
FROM your-custom-image:tag
# Copy the sandbox binary from the official image
COPY --from=docker.io/cloudflare/sandbox:0.7.0 /container-server/sandbox /sandbox
ENTRYPOINT ["/sandbox"]/sandbox 二进制文件会启动支持 SDK 通信的 HTTP API 服务器。你还可以选择运行自己的启动命令:
FROM node:20-slim
COPY --from=docker.io/cloudflare/sandbox:0.7.0 /container-server/sandbox /sandbox
# Copy your application
COPY . /app
WORKDIR /app
ENTRYPOINT ["/sandbox"]
CMD ["node", "server.js"]使用 CMD 时,sandbox 二进制文件会将你的命令作为子进程运行,并正确转发信号。
对于更复杂的启动序列,请创建自定义启动脚本:
FROM docker.io/cloudflare/sandbox:0.7.0-python
COPY my-app.js /workspace/my-app.js
COPY startup.sh /workspace/startup.sh
RUN chmod +x /workspace/startup.sh
CMD ["/workspace/startup.sh"]基础镜像已设置正确的 ENTRYPOINT,因此你只需提供 CMD。sandbox 二进制文件会启动 HTTP API 服务器,然后将你的 CMD 作为子进程生成,并正确转发信号。
#!/bin/bash
# Start your services in the background
node /workspace/my-app.js &
# Start additional services
redis-server --daemonize yes
until redis-cli ping; do sleep 1; done
# Keep the script running (the sandbox binary handles the API server)
wait- 镜像管理 - 构建镜像并推送到 Cloudflare 的 registry
- Wrangler 配置 - 在 wrangler.jsonc 中使用自定义镜像
- Docker 文档 ↗ - 完整 Dockerfile 语法
- Container 概念 - 理解运行时环境