跳转到内容
搜索文档

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');
// 等待完成,返回输出

后台进程 (startProcess()):

const process = await sandbox.startProcess('node server.js');
// 立即返回,进程在后台运行

网络能力

出站连接正常工作:

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); // 公共 URL

Localhost 在沙箱内正常工作:

redis-server &      # 启动服务器
redis-cli ping      # 本地连接

安全性

沙箱之间(隔离)

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

沙箱内部(共享)

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

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

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

限制

无法

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

相关资源

这篇文档对您有帮助吗?