Docker は自分に適しているか?
- Yes: 分離された一時的なゲートウェイ環境が必要、またはローカルインストールなしのホストで OpenClaw を動かしたい。
- No: 自分のマシン上で動かしており、最速の開発ループだけが欲しい。この場合は通常のインストールフローを使ってください。
- サンドボックスに関する補足: エージェントのサンドボックス化にも Docker を使いますが、完全なゲートウェイ全体を Docker 内で動かす必要は ありません。Sandboxing を参照してください。
- コンテナ化されたゲートウェイ (Docker 内で OpenClaw 全体を実行)
- セッション単位のエージェントサンドボックス (ホスト上のゲートウェイ + Docker で分離したエージェントツール)
要件
- Docker Desktop (または Docker Engine) + Docker Compose v2
- イメージビルド用に最低 2 GB RAM
- 1 GB ホストでは
pnpm installが OOM kill され、exit 137 になることがあります
- 1 GB ホストでは
- イメージとログを保持できる十分なディスク容量
- VPS / 公開ホストで動かす場合は Security hardening for network exposure を確認してください
- 特に Docker の
DOCKER-USERfirewall policy に注意してください
- 特に Docker の
コンテナ化された Gateway(Docker Compose)
クイックスタート(推奨)
ここでの Docker 既定値は、host alias ではなく bind mode(
lan / loopback)を前提にしています。gateway.bind には 0.0.0.0 や localhost のような host alias ではなく、lan や loopback のような bind mode の値を使ってください。- ゲートウェイイメージをローカルでビルドする
OPENCLAW_IMAGEが設定されていれば、代わりにリモートイメージを pull します
- オンボーディングウィザードを実行する
- 任意のプロバイダー設定に関するヒントを表示する
- Docker Compose 経由でゲートウェイを起動する
- ゲートウェイトークンを生成して
.envに書き込む
OPENCLAW_IMAGE— ローカルビルドの代わりにリモートイメージを使う (例:ghcr.io/openclaw/openclaw:latest)OPENCLAW_DOCKER_APT_PACKAGES— ビルド時に追加の apt パッケージを入れるOPENCLAW_EXTENSIONS— ビルド時に extension の依存関係を事前インストールする- スペース区切りの extension 名を指定します。例:
diagnostics-otel matrix
- スペース区切りの extension 名を指定します。例:
OPENCLAW_EXTRA_MOUNTS— 追加のホスト bind mount を加えるOPENCLAW_HOME_VOLUME—/home/nodeを named volume として永続化するOPENCLAW_SANDBOX— Docker ゲートウェイ用サンドボックス設定の bootstrap を有効にする- 明示的に truthy な値
1、true、yes、onの場合のみ有効です
- 明示的に truthy な値
OPENCLAW_INSTALL_DOCKER_CLI— ローカルイメージビルド向けの build arg passthrough1を指定するとイメージ内に Docker CLI を入れますdocker-setup.shはローカルビルドでOPENCLAW_SANDBOX=1の場合、自動でこれを設定します
OPENCLAW_DOCKER_SOCKET— Docker socket path を上書きする- デフォルトは
DOCKER_HOST=unix://...の path、そうでなければ/var/run/docker.sock
- デフォルトは
OPENCLAW_ALLOW_INSECURE_PRIVATE_WS=1— 緊急時向け- CLI / オンボーディングクライアント経路で、信頼済み private network 上の
ws://target を許可します - デフォルトは loopback のみです
- CLI / オンボーディングクライアント経路で、信頼済み private network 上の
OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0— コンテナ browser の hardening flag を無効化する--disable-3d-apis、--disable-software-rasterizer、--disable-gpuを外し、WebGL / 3D 互換性が必要なときに使います
OPENCLAW_BROWSER_DISABLE_EXTENSIONS=0— browser フローで extension が必要なときに有効のままにする- 既定ではサンドボックス側の browser で extension は無効です
OPENCLAW_BROWSER_RENDERER_PROCESS_LIMIT=<N>— Chromium の renderer process 上限を設定する0にするとこのフラグを省略し、Chromium のデフォルト動作を使います
- ブラウザで
http://127.0.0.1:18789/を開く - Control UI にトークンを貼り付ける(Settings → token)
- URL が再度必要ですか?
docker compose run --rm openclaw-cli dashboard --no-openを実行してください。
Docker ゲートウェイ用の agent sandbox を有効にする(オプトイン)
docker-setup.sh は、Docker デプロイ向けに agents.defaults.sandbox.* を初期設定することもできます。
有効化するには:
- このスクリプトはサンドボックスの前提条件を満たしたあとでのみ
docker.sockをマウントします。 - サンドボックスセットアップを完了できない場合、再実行時に古い / 壊れた設定が残らないよう
agents.defaults.sandbox.modeをoffに戻します。 Dockerfile.sandboxがない場合は警告を出して続行します。- 必要なら
scripts/sandbox-setup.shでopenclaw-sandbox:bookworm-slimをビルドしてください。
- 必要なら
- ローカル以外の
OPENCLAW_IMAGEを使う場合、そのイメージにはサンドボックス実行用の Docker CLI サポートがあらかじめ含まれている必要があります。
自動化 / CI(非対話、TTY ノイズなし)
スクリプトや CI では、-T で Compose の疑似 TTY 割り当てを無効にしてください。
docker-compose.yml 側で空文字として解決されるため、variable is not set 警告が繰り返し出ないようになっています。
共有ネットワークのセキュリティに関する注意(CLI + ゲートウェイ)
openclaw-cli は network_mode: "service:openclaw-gateway" を使うため、CLI コマンドは Docker 内の 127.0.0.1 経由で確実にゲートウェイへ到達できます。
これは共有された信頼境界として扱ってください。loopback bind は、この 2 つのコンテナ間の分離を意味しません。より強い分離が必要なら、同梱の openclaw-cli サービスではなく、別コンテナまたは別ホストのネットワーク経路からコマンドを実行してください。
CLI プロセスが侵害された場合の影響を減らすため、Compose 設定では openclaw-cli に対して NET_RAW / NET_ADMIN を drop し、no-new-privileges を有効にしています。
設定とワークスペースはホスト上の次の場所に書き込まれます。
~/.openclaw/~/.openclaw/workspace
リモートイメージを使う(ローカルビルドをスキップ)
公式の事前ビルド済みイメージは次で公開されています。 イメージ名はghcr.io/openclaw/openclaw を使ってください(似た名前の Docker Hub
イメージではありません)。
一般的なタグ:
main—mainの最新ビルド<version>— リリースタグのビルド(例:2026.2.26)latest— 最新の安定リリースタグ
ベースイメージのメタデータ
現在のメイン Docker イメージで使われているベースイメージは次のとおりです。node:22-bookworm
org.opencontainers.image.base.name=docker.io/library/node:22-bookwormorg.opencontainers.image.base.digest=sha256:b501c082306a4f528bc4038cbf2fbb58095d583d0419a259b2114b5ac53d12e9org.opencontainers.image.source=https://github.com/openclaw/openclaworg.opencontainers.image.url=https://openclaw.aiorg.opencontainers.image.documentation=https://docs.openclaw.ai/install/dockerorg.opencontainers.image.licenses=MITorg.opencontainers.image.title=OpenClaworg.opencontainers.image.description=OpenClaw gateway and CLI runtime container imageorg.opencontainers.image.revision=<git-sha>org.opencontainers.image.version=<tag-or-main>org.opencontainers.image.created=<rfc3339 timestamp>
v2026.2.22 と、それ以前の 2026 系タグ
(例: v2026.2.21, v2026.2.9)でもすでに Bookworm を使用しています。
既定では、セットアップスクリプトはソースからイメージをビルドします。代わりに事前ビルド済み
イメージを取得したい場合は、スクリプト実行前に OPENCLAW_IMAGE を設定してください。
OPENCLAW_IMAGE が既定の openclaw:local ではないことを検出すると、
docker build の代わりに docker pull を実行します。それ以外の処理
(オンボーディング、ゲートウェイ起動、トークン生成)は同じです。
docker-setup.sh はローカルの docker-compose.yml と補助ファイルを利用するため、
引き続きリポジトリルートから実行してください。OPENCLAW_IMAGE はローカルイメージのビルド時間を省くための設定であり、
Compose を使ったセットアップ手順そのものを置き換えるものではありません。
シェルヘルパー(任意)
日常的な Docker 管理を簡単にするには、ClawDock をインストールしてください。
clawdock-start、clawdock-stop、clawdock-dashboard などを使えます。利用可能なコマンドは clawdock-help で確認してください。
詳しくは ClawDock Helper README を参照してください。
手動手順(Compose)
docker compose ... はリポジトリルートから実行してください。
OPENCLAW_EXTRA_MOUNTS または OPENCLAW_HOME_VOLUME を有効にした場合、セットアップスクリプトは
docker-compose.extra.yml を生成します。別の場所で Compose を実行するときは、
これを含めてください。
Control UI のトークンとペアリング(Docker)
unauthorized または disconnected (1008): pairing required と表示された場合は、
新しいダッシュボードリンクを取得して、ブラウザデバイスを承認してください。
追加マウント(任意)
追加のホストディレクトリをコンテナへマウントしたい場合は、docker-setup.sh を実行する前に OPENCLAW_EXTRA_MOUNTS を設定してください。これは
Docker の bind mount をカンマ区切りで指定する形式で、
docker-compose.extra.yml を生成して openclaw-gateway と openclaw-cli の両方に適用します。
例:
- macOS / Windows では、対象パスが Docker Desktop と共有されている必要があります。
- 各項目は
source:target[:options]形式で、スペース、タブ、改行を含めてはいけません。 OPENCLAW_EXTRA_MOUNTSを編集した場合は、 追加の Compose ファイルを再生成するためにdocker-setup.shを再実行してください。docker-compose.extra.ymlは自動生成されます。手動で編集しないでください。
コンテナ全体の home を永続化する(任意)
コンテナを作り直したあとも/home/node を保持したい場合は、
OPENCLAW_HOME_VOLUME で named volume を指定してください。これにより Docker volume が作成され、
/home/node にマウントされます。同時に標準の設定 / ワークスペース用 bind mount も維持されます。ここでは
bind path ではなく named volume を使ってください。bind mount が必要な場合は
OPENCLAW_EXTRA_MOUNTS を使ってください。
例:
- named volume 名は
^[A-Za-z0-9][A-Za-z0-9_.-]*$に一致する必要があります。 OPENCLAW_HOME_VOLUMEを変更した場合は、 追加の Compose ファイルを再生成するためにdocker-setup.shを再実行してください。- named volume は
docker volume rm <name>で削除するまで保持されます。
追加の apt packages をインストールする(任意)
イメージ内でシステムパッケージ(ビルドツールやメディア関連ライブラリなど)が必要な場合は、docker-setup.sh 実行前に OPENCLAW_DOCKER_APT_PACKAGES を設定してください。
これによりイメージのビルド中にパッケージがインストールされるため、コンテナを削除しても保持されます。
例:
- これは apt パッケージ名をスペース区切りで指定する形式です。
OPENCLAW_DOCKER_APT_PACKAGESを変更した場合は、イメージを再ビルドするためにdocker-setup.shを再実行してください。
extension dependencies を事前インストールする(任意)
独自のpackage.json を持つ extension(例: diagnostics-otel, matrix,
msteams)は、初回読み込み時に npm 依存関係をインストールします。代わりにそれらの
依存関係をイメージへ組み込みたい場合は、
docker-setup.sh 実行前に OPENCLAW_EXTENSIONS を設定してください。
- これは
extensions/配下のディレクトリ名をスペース区切りで指定する形式です。 package.jsonを持つ extension のみが対象です。これを持たない軽量プラグインは無視されます。OPENCLAW_EXTENSIONSを変更した場合は、イメージを再ビルドするためにdocker-setup.shを再実行してください。
上級者向けのフル機能コンテナ(オプトイン)
既定の Docker イメージは セキュリティ優先 で、非 root のnode
ユーザーとして実行されます。攻撃対象領域は小さくなりますが、次の制約があります。
- 実行時にシステムパッケージを追加インストールできない
- デフォルトでは Homebrew なし
- Chromium / Playwright ブラウザは同梱されない
- ブラウザのダウンロードやツールキャッシュを保持できるよう、
/home/nodeを永続化します。
- システム依存関係をイメージに組み込みます(再現性があり、永続化されます)。
npxを使わずに Playwright ブラウザをインストールします(npm の override 競合を回避できます)。
--with-deps を使う代わりに OPENCLAW_DOCKER_APT_PACKAGES 付きでイメージを再ビルドしてください。
- Playwright ブラウザのダウンロードを永続化します。
docker-compose.ymlでPLAYWRIGHT_BROWSERS_PATH=/home/node/.cache/ms-playwrightを設定する。OPENCLAW_HOME_VOLUMEで/home/nodeが永続化されていることを確認するか、OPENCLAW_EXTRA_MOUNTSで/home/node/.cache/ms-playwrightをマウントする。
権限エラーと EACCES
イメージはnode(uid 1000)として実行されます。/home/node/.openclaw で
権限エラーが表示される場合は、ホスト側の bind mount が uid 1000 の所有になっていることを確認してください。
例(Linux host):
より高速な再ビルド(推奨)
再ビルドを高速化するには、依存関係のレイヤーがキャッシュされるように Dockerfile の順序を調整してください。 これにより lockfile が変わらない限りpnpm install の再実行を避けられます。
チャネルのセットアップ(任意)
CLI コンテナを使ってチャネルを設定し、必要に応じてゲートウェイを再起動してください。 WhatsApp(QR):OpenAI Codex OAuth(ヘッドレス Docker)
ウィザードで OpenAI Codex OAuth を選ぶと、ブラウザ URL を開いてhttp://127.0.0.1:1455/auth/callback のコールバックを受け取ろうとします。Docker や
ヘッドレス環境では、このコールバック時にブラウザでエラーが表示されることがあります。遷移先の完全なリダイレクト URL をコピーし、
認証を完了するためにウィザードへ貼り戻してください。
Health checks
コンテナのプローブ用エンドポイント(認証不要):/health と /ready です。
/healthz は「ゲートウェイプロセスが起動している」ことを確認する軽量な liveness probe です。
/readyz は起動猶予期間中も ready のままで、その後は必須の
管理対象チャネルが猶予期間後も未接続のままか、あとから切断された場合にのみ 503 を返します。
Docker イメージには、バックグラウンドで /healthz を監視する組み込みの HEALTHCHECK が含まれています。
つまり Docker は、OpenClaw が引き続き応答しているかを継続的に確認します。
チェックが失敗し続けると、Docker はコンテナを unhealthy とマークし、
オーケストレーションシステム(Docker Compose の再起動ポリシー、Swarm、Kubernetes
など)は自動的に再起動または置き換えを行えます。
認証付きの詳細なヘルススナップショット(ゲートウェイ + チャネル):
E2E smoke test(Docker)
QR import smoke test(Docker)
lan と loopback の違い(Docker Compose)
docker-setup.sh は既定で OPENCLAW_GATEWAY_BIND=lan を設定するため、
Docker のポート公開によりホストから http://127.0.0.1:18789 へアクセスできます。
lan(既定値): ホストのブラウザとホスト CLI から、公開されたゲートウェイポートへ到達できます。loopback: コンテナの network namespace 内にいるプロセスだけが ゲートウェイへ直接到達できます。ホストへ公開されたポート経由のアクセスは失敗する場合があります。
gateway.mode=local も固定するため、Docker CLI
コマンドは既定でローカル loopback 宛てを使います。
旧来の設定に関する注意: gateway.bind には bind mode の値(lan / loopback /
custom / tailnet / auto)を使ってください。host alias(0.0.0.0, 127.0.0.1,
localhost, ::, ::1)は使わないでください。
Gateway target: ws://172.x.x.x:18789 や、Docker CLI コマンドで繰り返し pairing required
エラーが表示される場合は、次を実行してください。
注意
- ゲートウェイの bind はコンテナ利用向けに既定で
lanです(OPENCLAW_GATEWAY_BIND)。 - Dockerfile の
CMDは--allow-unconfiguredを使います。マウントされた設定でgateway.modeがlocalでなくても起動します。ガードを強制したい場合はCMDを上書きしてください。 - ゲートウェイコンテナがセッション情報の正本です(
~/.openclaw/agents/<agentId>/sessions/)。
ストレージモデル
- 永続化されるホスト側データ: Docker Compose は
OPENCLAW_CONFIG_DIRを/home/node/.openclawに、OPENCLAW_WORKSPACE_DIRを/home/node/.openclaw/workspaceに bind mount するため、これらのパスはコンテナを置き換えても保持されます。 - 一時的なサンドボックス tmpfs:
agents.defaults.sandboxが有効な場合、サンドボックスコンテナは/tmp、/var/tmp、/runにtmpfsを使います。これらのマウントはトップレベルの Compose スタックとは別で、サンドボックスコンテナとともに消えます。 - ディスク増加しやすい箇所:
media/、agents/<agentId>/sessions/sessions.json、transcript JSONL ファイル、cron/runs/*.jsonl、および/tmp/openclaw/(または設定したlogging.file)配下のローテートログに注意してください。Docker 外で macOS アプリも実行している場合、そのサービスログは別管理で、~/.openclaw/logs/gateway.log、~/.openclaw/logs/gateway.err.log、/tmp/openclaw/openclaw-gateway.logに出力されます。
Agent Sandbox(ホスト上のゲートウェイ + Docker ツール)
詳細: Sandboxing概要
agents.defaults.sandbox が有効な場合、main 以外のセッション は Docker
コンテナ内でツールを実行します。ゲートウェイはホスト上に残りますが、ツール実行は分離されます。
- 既定の scope は
"agent"(agent ごとに 1 つのコンテナ + ワークスペース) - セッション単位で分離したい場合は scope に
"session"を使います - scope ごとのワークスペースフォルダを
/workspaceにマウントします - 必要に応じて agent workspace access(
agents.defaults.sandbox.workspaceAccess)を設定できます - ツールポリシーは allow/deny 方式で、deny が優先されます
- 受信メディアは、ツールから読めるようアクティブなサンドボックスワークスペース(
media/inbound/*)へコピーされます(workspaceAccess: "rw"の場合は agent ワークスペースに入ります)
scope: "shared" はセッション間の分離を無効にします。すべてのセッションが
1 つのコンテナと 1 つのワークスペースを共有します。
Agent ごとのサンドボックスプロファイル(multi-agent)
multi-agent routing を使う場合、各 agent はサンドボックス設定とツール設定を上書きできます。 対象はagents.list[].sandbox と agents.list[].tools(および agents.list[].tools.sandbox.tools)です。これにより、1 つのゲートウェイ内で
異なるアクセスレベルを混在させて運用できます。
- フルアクセス(個人用 agent)
- 読み取り専用ツール + 読み取り専用ワークスペース(家族用 / 業務用 agent)
- filesystem / shell ツールなし(公開 agent)
デフォルト動作
- イメージ:
openclaw-sandbox:bookworm-slim - agent ごとに 1 つのコンテナ
- Agent workspace access:
workspaceAccess: "none"(既定値)では~/.openclaw/sandboxesを使います"ro"ではサンドボックスワークスペースを/workspaceのままにし、agent workspace を/agentへ読み取り専用でマウントします(write/edit/apply_patchは無効)"rw"では agent workspace を/workspaceへ読み書き可能でマウントします
- 自動削除: アイドル状態が 24 時間超、または作成から 7 日超
- ネットワーク: 既定値は
none(外向き通信が必要な場合のみ明示的にオプトイン)hostはブロックされます。container:<id>も既定でブロックされます(namespace join のリスクがあるため)。
- 既定で許可:
exec,process,read,write,edit,sessions_list,sessions_history,sessions_send,sessions_spawn,session_status - 既定で拒否:
browser,canvas,nodes,cron,discord,gateway
サンドボックスを有効にする
setupCommand でパッケージをインストールする予定がある場合は、次に注意してください。
- 既定の
docker.networkは"none"(外向き通信なし)です。 docker.network: "host"はブロックされます。docker.network: "container:<id>"はデフォルトでブロックされます。- 緊急時のみの上書き設定:
agents.defaults.sandbox.docker.dangerouslyAllowContainerNamespaceJoin: true readOnlyRoot: trueではパッケージインストールを実行できません。apt-getを使うにはuserが root である必要があります(userを省略するか、user: "0:0"を設定します)。 OpenClaw はsetupCommand(または Docker 設定)が変わると自動的にコンテナを再作成しますが、 コンテナが直近で使用されていた(約 5 分以内)場合は除きます。稼働中のコンテナでは、 正確なopenclaw sandbox recreate ...コマンドを含む警告が表示されます。
agents.defaults.sandbox.docker 配下にあります。
network, user, pidsLimit, memory, memorySwap, cpus, ulimits,
seccompProfile, apparmorProfile, dns, extraHosts,
dangerouslyAllowContainerNamespaceJoin(緊急時専用)。
multi-agent では、agents.defaults.sandbox.scope / agents.list[].sandbox.scope が "shared" の場合を除き、agent ごとに agents.list[].sandbox.{docker,browser,prune}.* で agents.defaults.sandbox.{docker,browser,prune}.* を上書きできます
("shared" の場合は無視されます)。
既定のサンドボックスイメージをビルドする
Dockerfile.sandbox を使って openclaw-sandbox:bookworm-slim がビルドされます。
共通サンドボックスイメージ(任意)
一般的なビルドツール群(Node、Go、Rust など)を含むサンドボックスイメージが必要な場合は、共通イメージをビルドしてください。openclaw-sandbox-common:bookworm-slim がビルドされます。使用するには、次のように設定します。
サンドボックス用ブラウザイメージ
サンドボックス内でbrowser ツールを実行するには、ブラウザイメージをビルドしてください。
Dockerfile.sandbox-browser を使って openclaw-sandbox-browser:bookworm-slim がビルドされます。コンテナでは CDP を有効にした Chromium と、
任意の noVNC オブザーバー(Xvfb 経由の headful モード)を実行します。
注意:
- Headful(Xvfb)は headless より bot blocking を受けにくくなります。
agents.defaults.sandbox.browser.headless=trueを設定すれば、引き続き headless を使えます。- フルデスクトップ環境(GNOME など)は不要で、表示は Xvfb が提供します。
- ブラウザコンテナは、グローバルな
bridgeではなく、専用の Docker network(openclaw-sandbox-browser)を既定で使います。 - 必要に応じて
agents.defaults.sandbox.browser.cdpSourceRangeを使い、コンテナ境界での CDP ingress を CIDR で制限できます(例:172.21.0.1/32)。 - noVNC のオブザーバーアクセスは既定でパスワード保護されます。OpenClaw は短時間だけ有効な observer token URL を提供し、パスワードは URL query ではなく URL fragment に保持されるローカル bootstrap page を返します。
- ブラウザコンテナの起動時既定値は、共有環境やコンテナワークロード向けに保守的に設定されており、次のフラグを含みます。
--remote-debugging-address=127.0.0.1--remote-debugging-port=<derived from OPENCLAW_BROWSER_CDP_PORT>--user-data-dir=${HOME}/.chrome--no-first-run--no-default-browser-check--disable-3d-apis--disable-software-rasterizer--disable-gpu--disable-dev-shm-usage--disable-background-networking--disable-features=TranslateUI--disable-breakpad--disable-crash-reporter--metrics-recording-only--renderer-process-limit=2--no-zygote--disable-extensionsagents.defaults.sandbox.browser.noSandboxが設定されている場合は、--no-sandboxと--disable-setuid-sandboxも追加されます。- 上記 3 つの graphics hardening フラグは任意です。ワークロードで
WebGL / 3D が必要な場合は、
OPENCLAW_BROWSER_DISABLE_GRAPHICS_FLAGS=0を設定して--disable-3d-apis,--disable-software-rasterizer,--disable-gpuなしで実行してください。 - extension の挙動は
--disable-extensionsで制御され、extension 依存のページや extension を多用するワークフローではOPENCLAW_BROWSER_DISABLE_EXTENSIONS=0により無効化 (つまり extension を有効化)できます。 --renderer-process-limit=2もOPENCLAW_BROWSER_RENDERER_PROCESS_LIMITで設定できます。ブラウザ並列数の調整が必要な場合は0にして、Chromium に 既定の process limit を選ばせることもできます。
- サンドボックス用ブラウザ制御 URL(
browserツール用) - noVNC URL(有効かつ headless=false の場合)
browser を追加し
(かつ deny から削除し)ない限り、そのツールはブロックされたままです。
prune ルール(agents.defaults.sandbox.prune)はブラウザコンテナにも適用されます。
カスタムサンドボックスイメージ
独自のイメージをビルドし、設定でそれを指定してください。ツールポリシー(allow/deny)
denyはallowに優先します。allowが空の場合:denyを除くすべてのツールが利用可能です。allowが空でない場合:allowにあるツールだけが利用可能です(denyを除く)。
自動削除ポリシー
調整できる項目は 2 つあります。prune.idleHours: X 時間使われていないコンテナを削除(0 = 無効)prune.maxAgeDays: X 日より古いコンテナを削除(0 = 無効)
- 稼働中のセッションは維持しつつ、有効期間を制限する:
idleHours: 24,maxAgeDays: 7 - 自動削除を一切行わない:
idleHours: 0,maxAgeDays: 0
セキュリティに関する注意
- 強い隔離が適用されるのは tools のみです(exec / read / write / edit / apply_patch)。
- browser / camera / canvas のような host-only ツールは既定でブロックされます。
- サンドボックスで
browserを許可すると 隔離が崩れます(browser はホスト上で実行されます)。
トラブルシューティング
- イメージがない:
scripts/sandbox-setup.shでビルドするか、agents.defaults.sandbox.docker.imageを設定してください。 - コンテナが起動していない: 必要になった時点で、セッションごとに自動作成されます。
- サンドボックスで権限エラーが出る:
docker.userを マウントしたワークスペースの所有権に一致する UID:GID へ設定する (またはワークスペースフォルダをchownする)。 - カスタムツールが見つからない: OpenClaw は
sh -lc(login shell)でコマンドを実行するため、/etc/profileを読み込んでPATHをリセットすることがあります。docker.env.PATHを設定して カスタムツールのパス(例:/custom/bin:/usr/local/share/npm-global/bin)を前置するか、 Dockerfile で/etc/profile.d/配下にスクリプトを追加してください。