ホーム チュートリアル カテゴリ Skills サイトについて
ZH EN JA KO
トラブルシューティング

OpenClawのポート競合とゲートウェイ起動失敗の解決

· 9 分で読了

問題の説明

OpenClawゲートウェイを起動する際に、ポート使用中エラーが発生します。

[openclaw:server] Error: listen EADDRINUSE: address already in use :::3000
    at Server.setupListenHandle [as _listen2] (node:net:1817:16)
    at listenInCluster (node:net:1865:12)
    at Server.listen (node:net:1964:7)

またはサービスは起動するが管理ダッシュボードにアクセスできません。

[openclaw:server] Server started on port 3000
$ curl http://localhost:3000/health
curl: (7) Failed to connect to localhost port 3000: Connection refused

OpenClawはデフォルトでポート3000をHTTPゲートウェイサービスに使用し、Webhookコールバックの受信、管理ダッシュボードの提供、REST APIの提供を行います。そのポートが別のプログラムに使用されている場合、OpenClawは起動できません。

診断手順

ポートの使用状況を確認

Linux / macOS:

lsof -i :3000

出力例:

COMMAND   PID   USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
node    12345   user   22u  IPv6 123456      0t0  TCP *:3000 (LISTEN)

またはssコマンドを使用:

ss -tlnp | grep 3000

Windows:

netstat -ano | findstr :3000

出力例:

TCP    0.0.0.0:3000    0.0.0.0:0    LISTENING    12345

PIDからポートを占有しているプロセスを特定:

tasklist /FI "PID eq 12345"

残存するOpenClawインスタンスを確認

ps aux | grep openclaw

古いOpenClawプロセスがまだ実行されている場合、適切にシャットダウンされていない可能性があります。

OpenClawの設定ポートを確認

cat ~/.openclaw/openclaw.json | grep port

設定ファイルに設定されたポート番号を確認してください。

解決方法

方法1:ポートを占有しているプロセスを停止する

ポートが古いOpenClawインスタンスに占有されている場合:

openclaw stop

stopコマンドが機能しない場合、プロセスを強制終了します。

Linux / macOS:

# ポート3000を占有しているプロセスを見つけて終了
kill $(lsof -t -i :3000)

# 通常のkillが効かない場合
kill -9 $(lsof -t -i :3000)

Windows:

# PIDを見つける
netstat -ano | findstr :3000

# プロセスを終了(PIDを置き換え)
taskkill /PID 12345 /F

プロセスを終了した後、OpenClawを再起動します。

openclaw start

方法2:OpenClawのポートを変更する

ポート3000が別の重要なサービス(React開発サーバーなど)に占有されている場合、OpenClawのポート設定を変更します。

コマンドライン引数でポートを指定:

openclaw start --port 3001

または設定ファイル ~/.openclaw/openclaw.json を変更:

{
  "server": {
    "port": 3001,
    "host": "0.0.0.0"
  }
}

または環境変数で設定:

OPENCLAW_PORT=3001 openclaw start

注意:Webhookベースのメッセージ受信(Telegram Webhookなど)を使用している場合、ポート変更後にWebhook URLのポート番号も更新する必要があります。

方法3:ファイアウォールのブロックを修正する

ポートが別のプログラムに占有されていないにもかかわらず接続が失敗する場合、ファイアウォールが接続をブロックしている可能性があります。

Linux(ufw):

sudo ufw allow 3000/tcp
sudo ufw status

Linux(firewalld):

sudo firewall-cmd --add-port=3000/tcp --permanent
sudo firewall-cmd --reload

Windows:

New-NetFirewallRule -DisplayName "OpenClaw" -Direction Inbound -Port 3000 -Protocol TCP -Action Allow

方法4:リバースプロキシを設定する

本番環境では、NginxまたはCaddyをリバースプロキシとして使用することを推奨します。OpenClawはローカルポートでリッスンし、リバースプロキシを通じて標準ポート80/443を外部に公開します。

Nginx設定例:

server {
    listen 80;
    server_name bot.example.com;

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;

        # WebSocketサポート
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
    }
}

Caddy設定例(自動HTTPS):

bot.example.com {
    reverse_proxy localhost:3000
}

リバースプロキシを使用する場合、OpenClawは127.0.0.1:3000(ローカルアクセスのみ)でリッスンするとセキュリティが向上します。

{
  "server": {
    "port": 3000,
    "host": "127.0.0.1"
  }
}

方法5:Unixソケットを使用する(Linux/macOS)

ポート競合が頻繁に発生する場合、OpenClawにTCPポートの代わりにUnixソケットを使用させることができます。

{
  "server": {
    "socket": "/tmp/openclaw.sock"
  }
}

Nginx設定も対応して更新します。

location / {
    proxy_pass http://unix:/tmp/openclaw.sock;
}

これによりポート競合の可能性を完全に排除できます。

修正の確認

起動後、サービスが正常に動作していることを確認します。

openclaw start

# サービスのヘルスステータスを確認
curl http://localhost:3000/health

# 期待される出力
# {"status":"ok","version":"x.x.x","uptime":5}

ポートを変更した場合は、コマンドの3000を新しいポート番号に置き換えてください。ブラウザでhttp://localhost:3000(または設定したポート)を開いて管理ダッシュボードにアクセスできることを確認してください。

OpenClawは無料のオープンソースAIアシスタント。WhatsApp、Telegram、Discordなど多数のプラットフォームに対応