2026 OpenClaw Docker Compose 本番基準: mem_limit、ヘルスチェック、再起動ポリシー、json-file ログローテーションの再現例(VPS 24/7)

mem_limit · healthcheck と start_period · restart のバックオフ · json-file ローテとディスク監視

2026 OpenClaw Docker Compose 本番基準

VPS 24/7OpenClaw を運用するチームが踏みがちな落とし穴は三つです。コールドスタートの Gateway を短すぎる healthcheck が殺すこと、WASM ピークより低い mem_limit による Exit 137、そして無制限の json-file ログによるディスク枯渇です。本文では開発用 compose と本番用 compose の最小差分六段階の再現ベースライン、そして再起動ジッターで人が止める条件を整理し、Exit 137 と allowedOrigins の調査記事およびイメージ固定とロールバックへ相互リンクします。

01

「手元では動く」compose が第三週頃から自滅し始める理由

開発環境では上限なしのメモリ、短いヘルス間隔、コンソールへのログが普通ですが、無人運用では再起動ストームに化けます。Gateway がまだ待ち受けていない段階で unhealthy になり、restart: always が秒単位で立ち上がり、バックオフより先にログや inode を食いつぶします。

OpenClaw は初回コンパイルとモデル読み込みで RSS が跳ねます。mem_limit を定常平均だけで決めると、夜間に OOM killer が静かにプロセスを落とします。ここでは各パラメータを docker inspect やホスト指標に結び付けられるようにします。

  1. 01

    start_period が短すぎる: 18789 が開く前にプローブが失敗し、画面は再起動のループに見えます。

  2. 02

    mem_limit とピークの乖離: 初回 WASM や依存取得のスパイクが cgroup を超え、137 で落ちる一方アプリログは薄い。

  3. 03

    json-file の無制限増加: コールバックとデバッグログが PR 検証の忙しさと一緒にルートを埋めます。

  4. 04

    バックオフのない restart: 設定ミスと誤判定が重なり CPU と IO を同時に飢餓させます。

  5. 05

    開発用バインドマウントを本番へ: ホットリロードと緩い権限がシークレット面を広げます。

02

開発 compose と本番 compose: リソースとログの最小差分表

同一リポジトリの二枚の override を前提にします。docker-compose.yml に共通定義を置き、docker-compose.prod.yml には本番差分だけを足してコピペドリフトを防ぎます。

観点開発のデフォルト本番ベースライン
メモリ上限なしまたはホスト全体明示的な mem_limit とコールド余裕。Exit 137 記事と突合
ヘルスチェック短い interval、start_period なしstart_period でコールドを覆う。retriestimeout を SLA 言語に合わせる
再起動unless-stopped または無しon-failure か上限付き always とホスト側アラート
ログドライバjson-file 既定などmax-size + max-file。手動 truncate に依存しない
ボリュームと秘密ソースツリーのバインド設定は読み取り専用マウント。秘密は env_file か secret。イメージ層に載せない

本番だけの行は Grafana かチケットの項目に必ず写せるべきで、願い事リストで終わらせない。

03

六段階ベースライン: mem_limit の校正から Gateway 準備へのプローブ整合

手順はイメージを固定の手順に従っていることを前提にします。:latest のままなら、staging で一度フルコールドを計測してから本番 override に移してください。

  1. 01

    ピークを採る: staging で docker stats --no-stream とコンテナ内 ps を使い、初回 Ready の前後 10 分の RSS を記録します。

  2. 02

    mem_limit を書く: ピークに合意した安全係数を掛けて compose に反映。swap 方針も文書化し silent OOM を避けます。

  3. 03

    レディネスを定義: Gateway がバインドするループバックと同じ経路を HTTP か CMD で叩きます。

  4. 04

    start_period を置く: 初回依存取得と WASM コンパイルを覆う長さ。平均ではなくコールド p95 を基準にします。

  5. 05

    json-file を締める: サービスごとに logging を宣言し max-sizemax-file を設定。ログディレクトリの増加率も監視します。

  6. 06

    再起動訓練: 失敗プローブを一度入れ、間隔・バックオフ・ページングが手順書と一致するか確認します。

yaml
services:
  openclaw:
    mem_limit: "2g"
    logging:
      driver: json-file
      options:
        max-size: "20m"
        max-file: "5"
    healthcheck:
      test: ["CMD", "curl", "-f", "http://127.0.0.1:18789/health"]
      interval: 30s
      timeout: 5s
      retries: 5
      start_period: 180s
    restart: on-failure:5

注: 実際のパスはイメージに合わせます。HTTP が難しければ CMD-SHELLnc も可ですが、HTTP より誤検知が増えやすいことをチケットに残します。

04

再起動ジッターと json-file: 自動化を止めるべき瞬間

docker events が手順書のしきい値を超えて再起動を報せるなら、まず設定ミスと誤った unhealthy を疑います。RAM 不足だけを疑って再起動を続けるとログ書き込み増幅が悪化します。

ルートが読み取り専用なら、まずトラフィックを切るかリバプロを止め、Exit 137 の記事の順で空きを確保します。ディスク健全性を確認する前に compose up -d でボリュームを上書きしないでください。

注意: max-file を下げるとホットログが早く回収されます。長期保管が必要ならオブジェクトストレージやログホストへ送り、単一ファイルを無制限に肥大化させないでください。

  1. A

    リリースを凍結: ストーム中はデプロイ入口を止めます。

  2. B

    状態を採取: inspect の Health と OOM 断片と直近 200 行のログを残します。

  3. C

    compose を戻す: 直前の override に戻し、再現パックをポストモーテム用に保管します。

05

参照パラメータとキャパシティレビューの出発点

以下はプロジェクト憲章とオンコールの出発値です。実際のコールドスタート分布とディスク増加曲線で置き換え、顧客向け SLA として売り文句にしないでください。

同じ VPS にリバプロや小さな DB も載せる場合、mem_limit とログ IO は隣接プロセスと競合します。レビューではコンテナ RSS、ホスト空きメモリ、ディスク書き込み遅延を一枚のダッシュボードに載せることを要求してください。

  • start_period の下限: 少なくともコールド p95 を覆う。二週間安定後に締め、ロールバック枠を残す。
  • json-file の増加率: 一日あたりの単一サービスがディスク予算の割合を超えたらログレベルを分けるか集中ログへ送る。
  • 再起動頻度しきい値: 「15 分で N 回超」をアラートと人の介入条件に書き、自動化が設定バグを隠さないようにする。
ホスト形ログの出発案イメージ固定との関係
2 vCPU / 4 GBより小さい max-size、短い保持、積極的な転送digest 固定でコールド伸びのサプライズを防ぐ
4 vCPU / 8 GBmax-file はやや緩めてもよいがローテは必須staging と prod は別タグでも同一 digest で検証
混合負荷データディスクやログ専用ボリュームで DB パーティションと分離アップグレード窓は固定記事と揃える

小さな一時 VPS に OpenClaw を載せるとメモリとディスクと秘密のローテを同時に欠きます。自前ベアメタルは電源と回線 SLA のリスクと引き換えです。

契約された算力と選択可能なリージョンと監査可能な帯域が欲しく、24/7 で Gateway とチャネルを観測可能に保ちたいチームには、クラウド上の Mac Mini レンタルが現実的です。VpsMesh の Mac Mini クラウドレンタルは、compose 基準とリバプロとバックアップを一つのキャパシティ物語で受け入れやすいことが多いです。

FAQ

よくある質問

プローブのユーザーと PATH、start_period がコールドを覆うか確認し、必要なら allowedOrigins とリバプロの記事でループバック経路を照合します。

ホストの dmesg と終了コードから入り、ピークを再計測してから limit を変えます。詳細は Exit 137 の記事。プラン比較は 価格ページ

ローカルのホット保持は短くなります。長期保管は集中ログへ。方針は ヘルプセンター を参照してください。