mem_limit · 初回WASM待機 · allowedOrigins · compose exec 承認 · コピー用 compose
チュートリアルどおりに 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 チェックリスト、運用期の三段トラブルシュートと併読し、「コンテナが立つ」から「無人でも安定」 へ進めます。
OpenClaw Gateway がコンテナ内で初回起動するとき、CPUが張り付いたままポートが開かない 多くはWASMサンドボックスのビルド段階であり、デッドロックではありません。v2026.4 インストール長文 のリソース推奨に合わせます。ホストの空きメモリと mem_limit の両方が厳しすぎると、Linux の OOM が Exit 137 を返し、ログには親切なエラーが間に合わないことがあります。
ホスト側: ホストで free -h を実行し、利用可能メモリがおおよそ 1.5~2 GiB の余裕を常時下回っていないか確認します。swap が 0 のときは137が出やすくなります。
Compose側: サービスに mem_limit: 2g 以上を設定し、同一マシン上の重いサービスとメモリを奪い合わないようにします。
初回ウィンドウ: コールドスタートでは失敗判定の前に 3~7分 を見込みます。その間は docker logs -f でビルドチェーンが動いているか観察します。
ヘルスチェック: healthcheck.start_period は少なくとも 360s を推奨し、WASM完了前に compose が誤って再起動しないようにします。
誤判定の抑制: 初回ウィンドウ内で連続して docker compose restart しないでください。毎回コールドビルドのピークが再発火します。
この5行を「VPSにOpenClawを載せる」Runbookの表紙に書くと、「手順どおりなのに起きない」チケットを大きく減らせます。Gateway のレイヤー別の詳細は 運用期三段の長文 を参照してください。
下の表は意図的に「根拠のあとにアクション」の順にしており、「ゲートウェイが壊れた気がする」というチケットを 再現可能なフィールド に収束させます。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_period と retries を緩める |
Docker のトラブルシュートが速いかどうかは、「137をOOMとして先に証明するか、アプリのバグと先に決めつけるか」にかかっています。
Gateway を 常時オンラインのリモートMacノード と組み合わせる場合は、「コンテナリソース」と「ノードSLA」を二つの受け入れ線に分けます。前者は compose とログ、後者はプロバイダのリージョンとメンテナンス枠です。
VPS上で 18789 を公網に晒すのはよくある誤設定です。インストール長文 では コンテナはループバックのみにバインド し、TLSはCaddyまたはNginxで443側で終端することを推奨しています。Control UI の non-loopback 系エラーは、ブラウザのオリジンとGatewayが許可するOriginが一致していないことが本質で、「Dockerが壊れた」わけではありません。
| シナリオ | リッスンとプロキシ | 設定の向き |
|---|---|---|
| ローカルのSSHトンネル検証のみ | 127.0.0.1:18789 | allowedOrigins に http://127.0.0.1:18789 を含める |
| HTTPSドメイン本番 | ループバック上流へリバースプロキシ | allowedOrigins に https://あなたのドメイン を列挙し、可能ならHost回避は使わない |
| 一時ラボ | HTTPのプライベートIP | IPオリジンを明示し、CIDRを絞り、メンテ後に廃止する |
| トリアージで「まずUIを見たい」 | それでも外側TLSは残す | 公式ドキュメントのHostヘッダー回避はリスク理解のうえでのみ使用し、後で必ず戻す |
{
"gateway": {
"mode": "local",
"controlUi": {
"allowedOrigins": ["https://openclaw.example.com"]
}
}
}
ヒント: openclaw.json を変更したあと、docker compose restart が 初回WASMウィンドウ内 に重なっていないか確認し、第2節の誤判定と重ねないようにします。
コンテナ内で openclaw を実行するとき、HOMEと設定ボリューム は実行中のGatewayプロセスと一致させる必要があります。一致しないと「ホストでは承認済み、コンテナではまだpending」になります。以下はサービス名を openclaw とした例です。composeの実名に置き換えてください。
サービス名の確認: docker compose ps でGatewayを動かしているコンテナを特定します。
同一環境に入る: docker compose exec openclaw sh -lc 'pwd; echo $HOME; ls -la ~/.openclaw | head'
承認待ち一覧: docker compose exec openclaw openclaw devices list
Request ID のコピー: UIまたはログからIDを取得し、openclaw devices approve <id> を実行します。
APIキーの可視性: No API key found for provider のときは、.env がcompose経由でコンテナに渡っているか確認し、ホストのshellプロファイルだけに書いていないか確認します。
チケットへの書き戻し: composeファイルパス、イメージタグ、openclaw.json の要約、approveコマンドを貼り、次回再利用しやすくします。
注意: 設定ボリュームがコンテナ内だけにあるのに、ホストで openclaw devices approve を直接実行すると、「コマンドは成功したがGatewayは認識しない」という偽陰性になります。
次の三つはコミュニティと本番でよく使う レビュー帯 です。自ホストの実測に置き換え、READMEに書くと新人が同じ穴に落ちにくくなります。
| 番号 | 本番前チェック | 合格の目安 |
|---|---|---|
| 01 | ports は 127.0.0.1 のみ | 公網から18789への直結が閉じている |
| 02 | env_file と秘密注入パスが一致 | コンテナ内でモデル事業者のキーが読める |
| 03 | mem_limit とswap方針を文書化 | 一回の負荷試験で137が出ない |
| 04 | healthcheck.start_period ≥ 360s | 初回ウィンドウ内で再起動嵐がない |
| 05 | openclaw.json の gateway.mode が local | 不正なキーを除去済み |
| 06 | リバースプロキシのTLSとHSTS方針 | ブラウザに混在コンテンツ警告がない |
| 07 | allowedOrigins が実アクセス元を覆う | Control UI に non-loopback が出ない |
| 08 | デバイス承認をコンテナ内で通す | devices list が空かすべて承認済み |
| 09 | .openclaw パスとバージョンをバックアップ | 1枚のrunbookで復元できる |
| 10 | チャネル文書と整合 | IMまたはWebhookのコールバックが到達する |
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の役割分担をアーキテクチャ図に書き、容量レビューは口約束ではなく 料金ページ と 注文ページ で進めると着地しやすくなります。
まずホストの dmesg と mem_limit によるOOMの有無を突き合わせ、初回WASMビルドのウィンドウも確保してください。リソース基線は OpenClaw v2026.4 インストール長文 の推奨と一緒にレビューするとよいです。
まず openclaw.json の gateway.controlUi.allowedOrigins に実際のHTTPSオリジンを列挙し、リバースプロキシが誤った Host を上流に送っていないか確認します。インストールと doctor の全体フローは Gateway インストールのトラブルシュートチェックリスト を参照してください。
docker compose exec でGatewayと同じユーザーとボリュームマウントに入り、openclaw devices list を実行してください。依然として異常なら 運用期の三段トラブルシュート に沿ってください。ノード仕様のレビューは 料金ページ と 注文ページ、リモート接続の項目は ヘルプセンター を開いてください。