← Sandbox SDK / sandbox / concepts
Среда выполнения контейнера
Каждый sandbox выполняется в изолированном контейнере 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 URLLocalhost работает внутри песочницы:
redis-server & # Start server
redis-cli ping # Connect locallyБезопасность
Между песочницами (изолированно):
- Каждый sandbox представляет собой отдельный контейнер
- Файловая система, память и сеть полностью изолированы
Внутри sandbox (общий):
- Все процессы видят одни и те же файлы
- Процессы могут обмениваться данными друг с другом
- Переменные окружения ограничены рамками сессии
Чтобы выполнять недоверенный код, используйте отдельную песочницу для каждого пользователя:
const sandbox = getSandbox(env.Sandbox, `user-${userId}`);Ограничения
Нельзя:
- Загружать модули ядра или обращаться к оборудованию хоста
Дополнительные материалы
- Разверните приложение Sandbox - Разворачивайте и поддерживайте согласованность пакета и образа
- Развертывание Containers - Путь развертывания контейнеров
- Архитектура - Место контейнеров в системе
- Модель безопасности - Подробности изоляции контейнера
- Жизненный цикл песочницы - Управление жизненным циклом контейнера
- Docker-in-Docker - Запуск Docker-контейнеров внутри Sandbox