Skip to content

非公式本サイトは非公式の日本語ドキュメントであり、Cloudflare 公式サイトではありません。最新情報はdevelopers.cloudflare.comをご確認ください。

コンテナランタイム

最終更新 Markdown で表示Agent セットアップ

各サンドボックスは、隔離された 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 URL

localhost はサンドボックス内で使えます:

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

セキュリティ

サンドボックス間(隔離):

  • 各サンドボックスは別のコンテナです
  • ファイルシステム、メモリ、ネットワークはすべて隔離されます

サンドボックス内(共有):

  • すべてのプロセスが同じファイルを見ます
  • プロセス同士は通信できます
  • 環境変数はセッションスコープです

信頼できないコードを実行するときは、ユーザーごとに別のサンドボックスを使います:

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

制限

できないこと:

  • カーネルモジュールの読み込み、またはホストハードウェアへのアクセス

関連リソース

役に立ちましたか?