← 技術ブログに戻る

OpenClaw Gateway 障害の9割を解決:ポート競合と doctor 診断実践

OpenClaw Gateway ポート 18789 競合と openclaw doctor 診断
Gateway 障害の多くは Agent ではなく、ポート・supervisor・auth のズレです。

OpenClaw Gateway 障害の9割を解決:ポート競合と doctor 診断実践 というテーマで、現場で効く復旧順序を整理します。EADDRINUSEanother gateway instance is already listening、そして「Runtime: running なのに UI に入れない」。Nuvcloud の運用相談をまとめると、Gateway 異常の約9割は ポート競合・supervisor 設定ずれ・auth/bind 不整合 の3系統で説明できます。再インストールより、まず診断の順序を固定する方が圧倒的に早いです。

この記事は「導入」ではなく「復旧」専用です。OpenClaw をまだデプロイしていない場合は 導入実践ガイド を先に確認してください。OpenHuman との役割分担は OpenHuman 運用記事 に分けています。公式ドキュメントは Gateway runbookGateway troubleshooting が基準です。

1)まず切り分け:Gateway はどのフェーズで詰まっているか

最初にやることは「再起動連打」ではなく、症状をフェーズに落とすことです。OpenClaw の Gateway は supervisor 管理の常駐プロセスで、CLI 側の probe 結果とは別軸で見えることがあります。ここが噛み合わないと、対処を誤ります。

フェーズ よく出る症状 最初に打つコマンド
A. 起動失敗 gateway start blocked / EADDRINUSE openclaw logs --followlsof -i :18789
B. プロセスは生存 Runtime: running だが Listening が空 openclaw gateway status --deep
C. ポート疎通はOK UI で unauthorized / WS 401 openclaw doctor で auth を確認
D. リモート経路問題 リモート端末では成功、手元ブラウザはタイムアウト bind と SSH トンネルの組み合わせを確認

2)18789 ポート競合:何が実際に listen しているか

デフォルトポートは 18789。解決順序は --portOPENCLAW_GATEWAY_PORTgateway.port → 18789 です。衝突時は「他ソフト」より先に「OpenClaw 自己競合(重複起動)」を疑うのが実務的です。

macOS: 競合確認の最短セット
# 1) 18789 の LISTEN を確認
lsof -nP -iTCP:18789 -sTCP:LISTEN

# 2) OpenClaw 側の認識と突き合わせ
openclaw gateway status --deep

# 3) 残留 PID が確定したら(慎重に)
kill <PID>
openclaw gateway restart
対処方針 適するケース 注意点
18789 を維持して解放 重複 launchd / 残留 Gateway が原因 openclaw doctor --fix で supervisor 情報も整合
ポート変更(例: 18790) 同居プロセスが多く共存が必要 クライアント URL・トンネル・ブックマークを同時更新
環境を分離 本番と検証の混在で再発する Runner や用途単位でマシン/プロファイルを分ける
現場ルール: lsof の実体が openclaw なら、先に「停止 → doctor --fix → 再起動」。いきなり kill -9 連打は、launchd 二重管理を悪化させがちです。

3)openclaw doctor を中心に据える

openclaw doctor は、設定妥当性・サービス状態・auth/port 整合を一気に点検するための入口です。まず浅く見て、必要時に --deep / --fix を使う運用が安定します。公式 FAQ もこの順序を推奨しています(OpenClaw FAQ)。

診断シーケンス(推奨)
openclaw status
openclaw gateway status
openclaw doctor
openclaw doctor --deep
openclaw doctor --fix
openclaw gateway restart
doctor 出力 意味 次アクション
Gateway service port does not match... supervisor が旧ポートを保持 doctor --fix または gateway install --force
Gateway start blocked... mode 不一致または local 設定破損 openclaw config set gateway.mode local
refusing to bind gateway without auth 非 loopback で有効 token 不足 openclaw doctor --generate-gateway-token
System-level ... service detected system レベルと user レベルが衝突 管理レイヤーを1つに統一

4)gateway status --deep で「生存」と「接続可能」を分ける

Runtime: running だけでは不十分です。復旧判断は Probe target / Listening / Last gateway error / Connectivity probe の4点で行います。

チケット添付向けログ採取
openclaw gateway status --json | jq .
openclaw logs --follow
# 別ターミナルで restart して Last gateway error の変化を確認

「gateway 風サービスが他にもある」という警告が出たら、過去の手動 install 残骸を疑ってください。ここを放置すると、再起動のたびに再発します。

5)auth と bind:起動するのに繋がらない時の本丸

ポート競合がなくても UI が開かない場合、原因は auth と bind の組み合わせであることが多いです。特に loopback 以外へ bind するなら token 前提で考えるべきです。

bind 設定 公開範囲 実務での使い方
loopback 127.0.0.1 のみ SSH ログイン後にローカルで UI を開く
lan / custom LAN または広域 token 必須 + FW 制御が前提
gateway.mode: remote クライアントは遠隔 URL 接続 役割分離には有効だが遠隔側ポート管理は必要
ヘルスチェック
curl -sS http://127.0.0.1:18789/health
curl -sS -H "Authorization: Bearer $OPENCLAW_GATEWAY_TOKEN" \
  http://127.0.0.1:18789/health
SSH トンネル(遠隔 Gateway が loopback の場合)
ssh -N -L 18789:127.0.0.1:18789 user@your-remote-mac
# 手元ブラウザで http://127.0.0.1:18789/ を開く

6)リモート Mac 運用で競合が増える理由

クラウド Mac では、VS Code Remote・tmux 前景実行・launchd 常駐が混ざりやすく、結果として自己競合が起こりやすくなります。運用ルールを先に決めるのが再発防止の近道です。

  1. 常駐は launchd に一本化し、長時間の前景実行を禁止。
  2. gateway.port 変更時は必ず doctor --fix 実行。
  3. ログ確認は openclaw logs --follow に集約。
  4. CI 連携時は Runner 側で 18789 を奪わないように設計(Runner 運用記事)。

リージョン選定で迷う場合は、香港比較記事 Japan vs Hong Kong も参考になります。価格とプランは 料金ページ で確認できます。

7)15分 Runbook:毎回同じ手順で潰す

チームで共通化するなら、次の手順をそのまま貼るのが有効です。ポイントは「同時に3箇所変更しない」ことです。

時間 アクション 合格条件
0-2分 openclaw gateway status --deep Runtime/Listening/Last error/Probe を記録
2-5分 lsof -nP -iTCP:18789 -sTCP:LISTEN リスナー PID と実体を確定
5-8分 openclaw doctor --fix blocking issue が消える
8-10分 openclaw gateway restart + logs --follow EADDRINUSE/auth 拒否が再発しない
10-12分 curl http://127.0.0.1:18789/health 200 または想定レスポンス
12-15分 SSH トンネル経由で UI 確認 Control UI と WS probe が安定
補足: この Runbook は Gateway 障害の一次対応に絞っています。項目網羅は公式 troubleshooting を優先してください。

結論:まず3点を揃える

  1. EADDRINUSE は、まず lsofstatus --deep で事実確認。
  2. running でも未接続なら、Listening と auth/bind を再点検。
  3. port/mode を触ったら必ず doctor --fix で supervisor 整合を戻す。

クラウド Mac で Gateway を安定運用するなら

Gateway は「CPU 性能」より「運用の再現性」で差が出ます。Nuvcloud の専有 Mac なら、同じ端末で openclaw doctorgateway status --deep を毎回同条件で回せるため、障害の切り分けが速くなります。

検証を日次で回してから月額へ移行する流れが最も安全です。料金プランを見る

8)FAQ(よくある質問)

OpenClaw Gateway のデフォルトポートは?

18789 です。優先順は --port > OPENCLAW_GATEWAY_PORT > gateway.port > 18789。

EADDRINUSE は必ず他アプリが原因?

いいえ。実際には OpenClaw の二重起動(前景 + launchd)で起こるケースが多いです。

openclaw gateway --force は使ってよい?

開発環境の緊急復旧には有効ですが、本番では先に status --deep で影響確認を推奨します。

doctorsecurity audit --deep の違いは?

doctor は可用性・整合性、security audit は露出面と認証強度の点検が主目的です。

なぜ channels status --probe も必要?

Gateway 正常化後でも channel transport 側で失敗することがあるため、切り分けに有効です。

gateway.mode: remote なら 18789 競合は消える?

クライアント側競合は減りますが、遠隔で Gateway を実行しているマシン側の競合は残ります。

Nginx で 18789 をリバースプロキシしても大丈夫?

可能ですが、WebSocket ヘッダ・タイムアウト・auth 転送の3点を誤ると不安定になります。

障害時に再インストールは必要?

多くの場合不要です。Runbook に沿って doctor --fix と supervisor 整合を取る方が再発を防げます。