2026 OpenClaw Agent サンドボックス(Sandbox):Docker イメージ、docker.user とボリューム権限、ツール非表示と OOM/137 分岐

おおよそ15分 · MACCOME

Docker / Compose では OpenClaw Gateway は起動できても、Agent サンドボックス を有効にすると、コンテナ起動失敗、ワークスペースが読取専用で書けない、サンドボックスにコマンドが無い、ビルド中に 137 の OOM で落ちる といった症状が出ます。本文は 2026 年の主流導入を、実行順に 止→起→検証→手当 に整理し、主要キー、docker.user とのボリューム権限の揃え方、イメージ構築と OOM 分岐表 と、既掲の Docker/ボリューム/doctor 記事の切り分けにします。読み終えた時点で、悪いイメージ、マウント UID 問題、リソース上限とログ上の合言葉の違いを区別できます。

悩みの核心:「ローカルではあるのにコンテナ内では無い」にサンドボックスが変わる理由

多くの場合、原因は プロセス境界 にあり、破損したインストールではありません。

  1. ルートはホストと別:サンドボックスは独立イメージです。ホストで brew install した物が、追加マウントや層の無い限り、サンドボックスの PATH には乗りません。
  2. ワークスペースは bind mount される:ホスト上が 501:20 なのに、コンテナ内のプロセスが 1000:1000 で走ると、Permission deniedEROFS として出る読み取り・書き込み拒否が多いです。
  3. もう一つの安全境界:たとえ Gateway からネットワークに出ても、サンドボックス内の DNS ・出站・ツール群は設計物です。「SSH でホストに入れてソフトを入れる」運用とは道が違います。

1 面で比較:Docker サンド/SSH や OpenShell/サンドなし

モード向き支払う代償誤解しやすい点
Docker サンド信頼できないシェルやスクリプト を厳格に分離し、「清潔な」環境を再現するイメージ容量、取得やビルド、UID や GID やボリュームの揃いホストのツールが引き継がれると思い込む
SSH ・リモートツールチェーン揃いの、信頼できるリモート Mac 上に直接出す露出面と口座まわりが大きい自機をサンド化したとみなし監査を忘れる
サンドなし ・ 全ローカル内網、低危険、手早い切り分けモデル経由のコードを実行する時の危険が高いCI や本番でも常に止める

設定口:agents.defaults.sandbox.dockersandbox-setup.sh

概念上は二層です。どのサンド実装を使うか(イメージとランタイム)と、イメージをどこから来させるか です。公式リポジトリでは多くの場合、ホスト上の docker CLI から扱えるイメージを 事前にビルド・取得 する scripts/sandbox-setup.sh(手元の版の名前)が出ます。設定上 agents.defaults.sandbox.docker.imageセッションを回すイメージ です。両者が食い違うと、Gateway からは有効に見えて docker runmanifest not foundpull access denied になる、といった典型例があります。

info

他記事との分業は? OPENCLAW_IMAGE や Control UI で行き詰まるなら、まず 公式 Docker 一括と GHCR イメージ へ。データのボリューム・権限・永続化・ Skills パス で行き詰まるなら、Docker ボリュームと権限のチェックリスト を参照してください。本稿は サブシステムのサンドと OOM/137 だけ扱います。

docker.userOPENCLAW_HOME マウント:症状に合わせ、乱 chmod 777 は止める

推奨手順は次のとおりです。

  • ホストで、マウントする workspace の属主と属階、および実際の Gateway プロセスの身元を確認する。
  • 設定で docker.user を、ボリュームに一致して書き込み可能な UID:GID に揃える(文書上のキー名に従い、版によっては sandbox.docker 配下)。
  • 方針上リポ全体の chown を禁じているなら、コンテナに渡す下位ディレクトリを調整し、丸ごと磁盤に広げない。

Linux とリモート Mac の差分として、名前付きと bind、SELinux ラベル(版によって)は「Compose では合っているのにコンテナ内で壊れている」を増幅します。モデルの会話で当てずっぽうをせず、Gateway/サンド起動ログの 先頭 I/O エラー行 を採ることが重要です。

「ホストにありサンド内にない」を最短で切る四問

  1. 当該バイナリはイメージの PATH 上のディレクトリ に入っているか。サンドへ docker execcommand -v した方が、口語より信頼できます。
  2. 特定の Node や Python のマイナー等、共有ライブラリかインタプリタの道 への依存をイメージが持っているか。
  3. 稼働に、~/.cache 等、ホストの 読取専用 bind を要するか。要るなら、手当てでホストを雑多に通すのではなく、イメージや共通体にキャッシュを乗せる方を檢討する。
  4. 当該ツールは Gateway と 同じネット方針 の下か。 HTTP(S)_PROXY が要る失敗を command not found と取り違えやすいです。

OOM と exit 137:Docker 内の「殺された」と「足りない」

137 = 128 + 9 (SIGKILL) は多くの場合 OOM キラーを連想しますが、人間の docker killcgroup によるメモリ上限 もあり得ます。分岐では少なくとも、失敗が docker build なのか docker run なのか、エンジン上で 並行ビルド がデスクトップや VM のメモリを潰していないか、リモート Mac では 実在の空きとスワプ、単一コンテナの制限ばかり見ていないか、を併せます。別枠に、本文は多いのに exit 12 である Cannot allocate memory 列も、メモリや一時磁盤と同じ表に乗せ、モデル側のパラメータ遊びだけに閉じない方が安全です。

「ビルド時 OOM」でよい順序は、並行を落とす(--parallel 等)こと、多段でコンパイルの山を下げること、Docker VM の枠を上げること、大きめのメモリ帯域の専有リモート Mac へ乗り換えて 安定基盤 にする、等です。ノートに複数 IDE ・ ローカル大模型 ・ Docker が一度に乗り切った、とは別物です。既に共有ストレージのチームは、inode や小ファイル が OOM めいた固まり方を起こしがちで、要ればボリューム分けと掃除方針を変えてください。

6 歩:ゼロから、安定してサンドで一巡ツールを回す

  1. Docker と Compose の健全性 と Gateway 起動を確かめ、Gateway ・モデル層の分岐と doctor つなぎ を当てる。
  2. 公式または同梱 sandbox-setup を走らせてビルドまたは取得し、設定と一致する イメージ名と ID を控える。
  3. 試験 workspace でサンドを有効にし、「小さいファイル一書き」と「大きいディレクトリ一読み取り」を一度ずつ、権限エラーを採る。
  4. docker.user とマウント の A/B は一度に一変数。差分を残し、三箇所同時変更で戻せない状態にしない。
  5. 中位の重さの ビルド を一発かけ、ホストとコンテナのメモリを見、137 か否かを記す。
  6. Runbook をチーム Wiki へ:最小再現、ログ抜粋、サンドのオフ・オンが必要な境を含める。
設定断片(例示。openclaw.json/版内の文書に従う)
{
  "agents": {
    "defaults": {
      "sandbox": { "mode": "docker" },
      "docker": { "user": "1000:1000" }
    }
  }
}
// 本番では sandbox.docker 配下など実プロジェクト向け。openclaw doctor / 公式文書を参照

レビューや容量に書ける 3 点

  • 137 と 128+ シグナル:分岐表で docker events かエンジンログ、ホストの memory pressure も併せて書き、事業上の OOM と docker build 並行の OOM を一緒に混ぜない。
  • ユーザ空間 ・ UID 写像:bind では、単一プロジェクト用の chown -R 1000:1000 と、家全般を動かす事は危険度が違います。依頼票と戻し点を付ける。
  • サンド冷起の遅さ:大イメージの層、初回 pip 索引、永続なしの繰返し配信は、「一度通る」と「百通る」のコストを大きく開けます。容量レビューに 先頭起動時間 の数字を置きます。

なぜ「ノートに一時的に Docker ・大模型 ・ Xcode」では企業レベルでサンドのリズムを持たないのか

多くの場合、同時のメモリと I/O の山 と、再現可能な環境境界 で止まります。昨日通ったのは並行の谷が合ったからで、生産的な Agent では 137 と書き出し拡大が一緒に来ることが多いです。7×24 の Gateway + サンド を要するなら、専有の Apple Silicon クラウド、明確な磁盤とログ、見通しの利く期間 の方が扱いやすい条件です。そこで MACCOME リモート Mac クラウドOpenClaw 常設の土台 にすると、ローカル環境の当てずっぽうに奪われる時間を減らし、ツールチェーンと納品へ回せます。

よくある質問

サンドボックス内でホストに入れたコマンドが見つかりません。どうすればよいですか。

イメージに焼き込み か、層を重ね、あるいはポリシーに従い追加のディレクトリをマウントし PATH を更新します。MCP/Skills 検証 の「Gateway での見え方」と同じ心持ちで、境はコンテナ内です。

exit 137 なら必ず OOM ですか。

必ずしもそうではありません。cgroup ・ システム OOM ・ 手動 kill を分け、少なくとも同時刻のエンジンと系のメモリ傾向を併せます。日次の入り方としては、公式 doctor/無反応分岐 の読み方が先にあります。

先にサンドを付けるか、大きいメモリの Mac クラウドにするか。

まず 隔離が要るのか、容量不足なのか を最小再現で示す。137 が Docker やホストの枠拡大で消えるのはリソース。常に信頼不能なコードを要するのならサンドと統制。公表の Mac クラウド レンタル価格 も併せて、注文用シンガポール ページ で地域注文の目安にしてください。