各サンドボックスは、隔離された Linux コンテナで動きます。Python、Node.js、よく使う開発ツールはあらかじめ入っています。プリインストール済みソフトウェアの一覧と、コンテナイメージのカスタマイズ方法は Dockerfile reference を参照してください。
追加ソフトウェアは、標準のパッケージマネージャーで実行時にインストールします。
# 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サンドボックス間(隔離):
- 各サンドボックスは別のコンテナです
- ファイルシステム、メモリ、ネットワークはすべて隔離されます
サンドボックス内(共有):
- すべてのプロセスが同じファイルを見ます
- プロセス同士は通信できます
- 環境変数はセッションスコープです
信頼できないコードを実行するときは、ユーザーごとに別のサンドボックスを使います:
const sandbox = getSandbox(env.Sandbox, `user-${userId}`);できないこと:
- カーネルモジュールの読み込み、またはホストハードウェアへのアクセス
- Deploy a Sandbox application - デプロイし、パッケージとイメージを揃えます
- Deploy Containers - Containers のデプロイ経路
- Architecture - コンテナがシステムにどう収まるか
- Security model - コンテナ隔離の詳細
- Sandbox lifecycle - コンテナのライフサイクル管理
- Docker-in-Docker - Sandbox 内で Docker コンテナを実行します