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

Container 运行时

最后更新 查看 MarkdownAgent 设置

每个沙箱都在隔离的 Linux 容器中运行,并预安装 Python、Node.js 和常用开发工具。有关预安装软件的完整列表以及如何自定义容器镜像,请参阅 Dockerfile 参考。

运行时软件安装

在运行时使用标准包管理器安装额外的软件:

# Python packages
pip install scikit-learn tensorflow

# Node.js packages
npm install express

# System packages (requires apt-get update first)
apt-get update && apt-get install -y redis-server

文件系统

该容器提供了一个标准的 Linux 文件系统。您可以在拥有权限的任何地方进行读写。

标准目录:

  • /workspace - 用户代码的默认工作目录
  • /tmp - 临时文件
  • /home - 用户家目录
  • /usr/bin, /usr/local/bin - 可执行二进制文件

示例:

await sandbox.writeFile('/workspace/app.py', 'print("Hello")');
await sandbox.writeFile('/tmp/cache.json', '{}');
await sandbox.exec('ls -la /workspace');

进程管理

进程在常规 Linux 环境中按预期运行。

前台进程 (exec()):

const result = await sandbox.exec('npm test');
// Waits for completion, returns output

后台进程 (startProcess()):

const process = await sandbox.startProcess('node server.js');
// Returns immediately, process runs in background

网络能力

出站连接 正常工作:

curl https://api.example.com/data
pip install requests
npm install express

入站连接 需要暴露端口:

const { hostname } = new URL(request.url);
await sandbox.startProcess('python -m http.server 8000');
const exposed = await sandbox.exposePort(8000, { hostname });
console.log(exposed.url); // Public URL

Localhost 在沙箱内正常工作:

redis-server &      # Start server
redis-cli ping      # Connect locally

安全性

沙箱之间(隔离):

  • 每个沙箱都是一个独立的容器
  • 文件系统、内存和网络都是隔离的

沙箱内部(共享):

  • 所有进程都看到相同的文件
  • 进程可以相互通信
  • 环境变量是会话作用域的

要运行不受信任的代码,请为每个用户使用独立的沙箱:

const sandbox = getSandbox(env.Sandbox, `user-${userId}`);

限制

无法:

  • 加载内核模块或访问主机硬件

相关资源

这篇文档对您有帮助吗?