2026年 OpenClaw Docker on VPS の立ち上げトラブルシュート
Exit 137 と Control UI エラーの対照表

mem_limit · 初回WASM待機 · allowedOrigins · compose exec 承認 · コピー用 compose

2026年 OpenClaw Docker on VPS のトラブルシュート

チュートリアルどおりに docker compose を起動した開発者が小メモリのVPSで最も多く見る三つの症状は、コンテナが137で即終了する、18789が長時間応答しない、Control UI が non-loopback や Host ヘッダー関連で失敗することです。本文ではまず free -h と mem_limit、初回WASMビルドの3~7分ウィンドウ の実行チェックリストを示し、続けて 症状 → docker logs の根拠 → 修正 の表で Exit 137、ボリューム権限、マウントの食い違いを扱います。次に 127.0.0.1 バインド、allowedOrigins、リバースプロキシ の意思決定表でUIエラーを収束させ、最後に コンテナ内デバイス承認の6ステップRunbook本番投入前の10項目チェック を示します。OpenClaw v2026.4 インストールとDocker強化の長文Gateway インストールと doctor チェックリスト運用期の三段トラブルシュートと併読し、「コンテナが立つ」から「無人でも安定」 へ進めます。

01

前提リソース:free -h、mem_limit、初回WASMビルドの「固まり」との見分け方

OpenClaw Gateway がコンテナ内で初回起動するとき、CPUが張り付いたままポートが開かない 多くはWASMサンドボックスのビルド段階であり、デッドロックではありません。v2026.4 インストール長文 のリソース推奨に合わせます。ホストの空きメモリと mem_limit の両方が厳しすぎると、Linux の OOM が Exit 137 を返し、ログには親切なエラーが間に合わないことがあります。

  1. 01

    ホスト側: ホストで free -h を実行し、利用可能メモリがおおよそ 1.5~2 GiB の余裕を常時下回っていないか確認します。swap が 0 のときは137が出やすくなります。

  2. 02

    Compose側: サービスに mem_limit: 2g 以上を設定し、同一マシン上の重いサービスとメモリを奪い合わないようにします。

  3. 03

    初回ウィンドウ: コールドスタートでは失敗判定の前に 3~7分 を見込みます。その間は docker logs -f でビルドチェーンが動いているか観察します。

  4. 04

    ヘルスチェック: healthcheck.start_period は少なくとも 360s を推奨し、WASM完了前に compose が誤って再起動しないようにします。

  5. 05

    誤判定の抑制: 初回ウィンドウ内で連続して docker compose restart しないでください。毎回コールドビルドのピークが再発火します。

この5行を「VPSにOpenClawを載せる」Runbookの表紙に書くと、「手順どおりなのに起きない」チケットを大きく減らせます。Gateway のレイヤー別の詳細は 運用期三段の長文 を参照してください。

02

Exit 137、ボリューム権限、マウントのずれ:症状、docker logs の根拠、修正アクション表

下の表は意図的に「根拠のあとにアクション」の順にしており、「ゲートウェイが壊れた気がする」というチケットを 再現可能なフィールド に収束させます。doctor インストールチェックリスト と併用すると、表の行番号をチケットテンプレートに書けます。

症状docker logs / ホストの根拠優先する修正
即時137終了dmesg にOOM、またはログが突然途切れるmem_limit 引き上げ/スペックアップ、同機競合の削減
workspace 読み取り Permission deniedマウントがroot所有でコンテナ内のnodeユーザーが書けないコンテナUIDへ chown、または user: をボリュームと揃える
設定を書いたが反映されないホストパスと compose ボリュームが二系統の .openclaw を指している単一のバインドパスに統一し、再起動前に docker compose config で検証
DNS がたまに失敗コンテナ内の curl がモデルエンドポイントでタイムアウトインストール長文に沿って Docker dns とホスト解決を確認
ログが増えないまま再起動ヘルスチェックが短すぎてプロセスが殺されるstart_periodretries を緩める

Docker のトラブルシュートが速いかどうかは、「137をOOMとして先に証明するか、アプリのバグと先に決めつけるか」にかかっています。

Gateway を 常時オンラインのリモートMacノード と組み合わせる場合は、「コンテナリソース」と「ノードSLA」を二つの受け入れ線に分けます。前者は compose とログ、後者はプロバイダのリージョンとメンテナンス枠です。

03

Control UI、127.0.0.1 バインド、リバースプロキシ:allowedOrigins と Host オプションの選び方

VPS上で 18789 を公網に晒すのはよくある誤設定です。インストール長文 では コンテナはループバックのみにバインド し、TLSはCaddyまたはNginxで443側で終端することを推奨しています。Control UI の non-loopback 系エラーは、ブラウザのオリジンとGatewayが許可するOriginが一致していないことが本質で、「Dockerが壊れた」わけではありません。

シナリオリッスンとプロキシ設定の向き
ローカルのSSHトンネル検証のみ127.0.0.1:18789allowedOriginshttp://127.0.0.1:18789 を含める
HTTPSドメイン本番ループバック上流へリバースプロキシallowedOriginshttps://あなたのドメイン を列挙し、可能ならHost回避は使わない
一時ラボHTTPのプライベートIPIPオリジンを明示し、CIDRを絞り、メンテ後に廃止する
トリアージで「まずUIを見たい」それでも外側TLSは残す公式ドキュメントのHostヘッダー回避はリスク理解のうえでのみ使用し、後で必ず戻す
json
{
  "gateway": {
    "mode": "local",
    "controlUi": {
      "allowedOrigins": ["https://openclaw.example.com"]
    }
  }
}

ヒント: openclaw.json を変更したあと、docker compose restart初回WASMウィンドウ内 に重なっていないか確認し、第2節の誤判定と重ねないようにします。

04

6ステップRunbook:docker compose exec での devices list、approve、パスずれ

コンテナ内で openclaw を実行するとき、HOMEと設定ボリューム は実行中のGatewayプロセスと一致させる必要があります。一致しないと「ホストでは承認済み、コンテナではまだpending」になります。以下はサービス名を openclaw とした例です。composeの実名に置き換えてください。

  1. 01

    サービス名の確認: docker compose ps でGatewayを動かしているコンテナを特定します。

  2. 02

    同一環境に入る: docker compose exec openclaw sh -lc 'pwd; echo $HOME; ls -la ~/.openclaw | head'

  3. 03

    承認待ち一覧: docker compose exec openclaw openclaw devices list

  4. 04

    Request ID のコピー: UIまたはログからIDを取得し、openclaw devices approve <id> を実行します。

  5. 05

    APIキーの可視性: No API key found for provider のときは、.env がcompose経由でコンテナに渡っているか確認し、ホストのshellプロファイルだけに書いていないか確認します。

  6. 06

    チケットへの書き戻し: composeファイルパス、イメージタグ、openclaw.json の要約、approveコマンドを貼り、次回再利用しやすくします。

注意: 設定ボリュームがコンテナ内だけにあるのに、ホストで openclaw devices approve を直接実行すると、「コマンドは成功したがGatewayは認識しない」という偽陰性になります。

05

コピー用compose骨子、本番前10チェック、「ノートPC常時起動」の代替案

次の三つはコミュニティと本番でよく使う レビュー帯 です。自ホストの実測に置き換え、READMEに書くと新人が同じ穴に落ちにくくなります。

  • 初回起動の見積もり: コールドスタートではチケットを開く前に少なくとも 3~7分 を見込みます。3分未満で再起動すると137が増えやすくなります。
  • メモリ水位: 単一インスタンスではホスト空きメモリを常時 2 GiB 以上の余裕を確保するのが目安です。この帯を下回るなら機能追加より昇格を優先します。
  • ログローテーション: Docker json-file は 単一ファイル10MiB以下、保持3個以下 に抑え、ディスク満杯による二次障害を避けます。
番号本番前チェック合格の目安
01ports127.0.0.1 のみ公網から18789への直結が閉じている
02env_file と秘密注入パスが一致コンテナ内でモデル事業者のキーが読める
03mem_limit とswap方針を文書化一回の負荷試験で137が出ない
04healthcheck.start_period ≥ 360s初回ウィンドウ内で再起動嵐がない
05openclaw.jsongateway.modelocal不正なキーを除去済み
06リバースプロキシのTLSとHSTS方針ブラウザに混在コンテンツ警告がない
07allowedOrigins が実アクセス元を覆うControl UI に non-loopback が出ない
08デバイス承認をコンテナ内で通すdevices list が空かすべて承認済み
09.openclaw パスとバージョンをバックアップ1枚のrunbookで復元できる
10チャネル文書と整合IMまたはWebhookのコールバックが到達する
yaml
services:
  openclaw:
    image: ghcr.io/openclaw/openclaw:latest
    restart: unless-stopped
    mem_limit: 2g
    ports:
      - "127.0.0.1:18789:18789"
    volumes:
      - ${HOME}/.openclaw:/home/node/.openclaw
    env_file:
      - .env
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
      interval: 60s
      timeout: 15s
      retries: 5
      start_period: 360s

ノートPCでGatewayを長時間動かすと、スリープ、蓋閉じ、不安定な上り回線 に引きずられがちです。家庭用回線だけではSLAを契約どおりに測りにくい面もあります。対照的に、期間課金のクラウドMac Miniノード は、VPS上のOpenClawとmacOSやXcode側作業を組み合わせるハイブリッド向きです。

よくある誤解: 0.0.0.0:18789 を「デバッグが楽」とみなすことです。公網VPSでは制御面をスキャナに晒すのと同義です。

Dockerゲートウェイを安定稼働 させつつ、重いビルドや実機作業を 契約可能なmacOS環境 に寄せたい場合、自前資産の調達と多地点同期では不利になりがちです。7×24で検収できるノードと弾力的なスペック が欲しい場面では、VpsMesh のクラウドMac Miniレンタルがより現実的な解 になります。VPS上のOpenClawと専用リモートMacの役割分担をアーキテクチャ図に書き、容量レビューは口約束ではなく 料金ページ注文ページ で進めると着地しやすくなります。

FAQ

よくある質問

まずホストの dmesgmem_limit によるOOMの有無を突き合わせ、初回WASMビルドのウィンドウも確保してください。リソース基線は OpenClaw v2026.4 インストール長文 の推奨と一緒にレビューするとよいです。

まず openclaw.jsongateway.controlUi.allowedOrigins に実際のHTTPSオリジンを列挙し、リバースプロキシが誤った Host を上流に送っていないか確認します。インストールと doctor の全体フローは Gateway インストールのトラブルシュートチェックリスト を参照してください。

docker compose exec でGatewayと同じユーザーとボリュームマウントに入り、openclaw devices list を実行してください。依然として異常なら 運用期の三段トラブルシュート に沿ってください。ノード仕様のレビューは 料金ページ注文ページ、リモート接続の項目は ヘルプセンター を開いてください。