← Sandbox SDK / sandbox / concepts
Runtime kontejneru
Každý sandbox běží v izolovaném kontejneru Linux s předinstalovaným Pythonem, Node.js a běžnými vývojářskými nástroji. Úplný seznam předinstalovaného softwaru a postup úpravy obrazu kontejneru najdete v Referenční dokumentace Dockerfile.
Instalace softwaru za běhu
Nainstalujte další software za běhu pomocí standardních správců balíčků:
# 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-serverSouborový systém
Kontejner poskytuje standardní souborový systém Linuxu. Číst a zapisovat můžete kdekoli, kde k tomu máte oprávnění.
Standardní adresáře:
/workspace- Výchozí pracovní adresář pro uživatelský kód/tmp- Dočasné soubory/home- Domovský adresář uživatele/usr/bin,/usr/local/bin- Spustitelné binární soubory
Příklad:
await sandbox.writeFile('/workspace/app.py', 'print("Hello")');
await sandbox.writeFile('/tmp/cache.json', '{}');
await sandbox.exec('ls -la /workspace');Správa procesů
Procesy fungují stejně, jak byste čekali v běžném linuxovém prostředí.
Procesy na popředí (exec()):
const result = await sandbox.exec('npm test');
// Waits for completion, returns outputProcesy na pozadí (startProcess()):
const process = await sandbox.startProcess('node server.js');
// Returns immediately, process runs in backgroundSíťové možnosti
Odchozí připojení fungují:
curl https://api.example.com/data
pip install requests
npm install expressPříchozí připojení vyžadují zveřejnění portu:
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 funguje v rámci sandboxu:
redis-server & # Start server
redis-cli ping # Connect locallySecurity
Mezi sandboxy (izolované):
- Každý sandbox je samostatný kontejner
- Souborový systém, paměť i síť jsou plně izolované
V sandboxu (sdílené):
- Všechny procesy vidí stejné soubory
- Procesy mezi sebou mohou komunikovat
- Proměnné prostředí jsou vázané na relaci
Chcete-li spouštět nedůvěryhodný kód, použijte pro každého uživatele samostatný sandbox:
const sandbox = getSandbox(env.Sandbox, `user-${userId}`);Omezení
Nelze:
- Načítat moduly jádra nebo přistupovat k hardwaru hostitele
Související zdroje
- Nasazení aplikace Sandbox - Nasazujte a udržujte soulad mezi balíčkem a obrazem
- Nasaďte Containers - Cesta nasazení pro Containers
- Architektura - Jak kontejnery zapadají do systému
- Bezpečnostní model - Podrobnosti o izolaci kontejneru
- Životní cyklus sandboxu - Správa životního cyklu kontejneru
- Docker-in-Docker - Spouštění Docker kontejnerů uvnitř Sandboxu