Dockerインストールガイド
対応バージョン:v1.8.23+ 最終更新:2026-04-22
本ガイドはDocker ComposeでDuDuClawサーバーをデプロイする一連の流れをカバーします—— port設定、三大CLI(Claude / Codex / Gemini)の認証方式から、 データ永続化、channel webhook、自動更新までを扱います。
ローカルで試すだけなら、まず docs/deployment-guide.md §1 のネイティブインストール手順を参照してください。ネイティブインストールの方が起動が速く、デバッグも簡単です。 Dockerはサーバーデプロイ、実行環境の分離、統一環境が必要なチームに向いています。
DuDuClawのDockerイメージは container/Dockerfile.server で構築され、3段階ビルドを採用しています。
| Stage | 内容 |
|---|---|
| 1. frontend-builder | node:22-slim + React/TSフロントエンドのビルド |
| 2. rust-builder | rust:slim + duduclaw リリースバイナリのコンパイル |
| 3. production | python:3.12-slim + 三大AI CLI + Docker CLI + 実行環境 |
最終イメージには以下が組み込まれています。
duduclawメインプログラム(Rust製、dashboard込み)@anthropic-ai/claude-code、@openai/codex、@google/gemini-cli(npm i -gでインストール)docker.ioCLI(ホストのDocker daemonを呼び出してagent sandboxを作成するために使用)- (任意)Python 3.12:高度なローカル推論(MLX / LLMLingua-2、
mlx_lm/llmlinguaが必要)にのみ必要。Skillのセキュリティスキャンとchannel返信はすでにRustネイティブ実装で、Pythonには依存しません
2. 前提条件
Section titled “2. 前提条件”| 項目 | バージョン | 備考 |
|---|---|---|
| Docker Engine | ≥ 24.0 | Linuxはネイティブ版を直接インストール推奨。macOS / WindowsはDocker DesktopまたはColimaを使用 |
| Docker Compose | v2.20+ | 最近のDockerには標準搭載。コマンドは docker compose で、旧来の docker-compose ではない |
| Git | 任意 | ソースコードのclone用 |
| ディスク容量 | ≥ 4 GB | ビルド中は一時的に約3 GB使用。完成イメージは約1.2 GB |
| Port | 18789 |
デフォルトのgateway port、変更可能 |
channel webhook(LINE、WhatsApp、Feishu、Generic Webhook)で外部からのメッセージを受信するには、 公開HTTPS URL が別途必要です。最も手軽な選択肢は Tailscale Funnel または Cloudflare Tunnelです。
3. クイックスタート
Section titled “3. クイックスタート”# 1. ソースコードをclonegit clone https://github.com/zhixuli0406/DuDuClaw.gitcd DuDuClaw
# 2. .envを作成(必要に応じて記入)cp .env.example .env$EDITOR .env
# 3. 起動docker compose up -d
# 4. 起動ログを確認docker compose logs -f duduclaw
# 5. 動作確認curl http://localhost:18789/health# {"status":"ok","version":"1.8.23", ...}
# 6. Dashboardを開くopen http://localhost:18789初回起動時、server-entrypoint.sh は ~/.duduclaw/config.toml が存在しないことを検出し、自動的に
duduclaw onboard --yes を実行して基本設定ファイルを生成します(API keyとchannel tokenは暗号化して保存されます)。
4. 環境変数(.env)
Section titled “4. 環境変数(.env)”docker-compose.yml は定義済みの変数のみを読み込み、未定義の変数は空文字列として渡されます
(すべて ${VAR:-} 構文を使用しているため)。以下のリストは用途別に分類しています。
4.1 Runtime認証(いずれか1つ以上を設定)
Section titled “4.1 Runtime認証(いずれか1つ以上を設定)”| 変数 | 用途 | 備考 |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN |
Claude Codeの長期有効token | claude setup-token で生成、推奨。ブラウザのないコンテナ環境に適している |
ANTHROPIC_API_KEY |
Claude APIキー | Fallback、従量課金 |
OPENAI_API_KEY |
Codex / OpenAI-compat APIキー | Fallback。ChatGPT Plus/Pro OAuthはvolume経由 |
GEMINI_API_KEY |
Gemini APIキー | Fallback。Google OAuthはvolume経由 |
最低いずれか1組が利用可能である必要があります。DuDuClawは agent.toml [runtime] と
[model] api_mode に基づいてどれを使うか決定します。詳細は
§6 三大CLIの認証設定を参照してください。
4.2 Channel Tokens
Section titled “4.2 Channel Tokens”| 変数 | Channel |
|---|---|
LINE_CHANNEL_TOKEN / LINE_CHANNEL_SECRET |
LINE Messaging API |
TELEGRAM_BOT_TOKEN |
Telegram Bot |
DISCORD_BOT_TOKEN |
Discord Bot |
SLACK_BOT_TOKEN / SLACK_APP_TOKEN |
Slack Socket Mode |
WHATSAPP_ACCESS_TOKEN など |
WhatsApp Cloud API(.env.example を参照) |
FEISHU_APP_ID / FEISHU_APP_SECRET |
Feishu |
実際に使用するchannelの分だけ記入すれば十分です。未記入の変数に対応するchannelは起動しません。
docker-compose.ymlは現状LINE_*/TELEGRAM_*/DISCORD_*の3グループのみをデフォルトで注入します。他のchannelを環境変数経由で渡すには、compose ファイルのenvironment:ブロックに自分で追加するか、起動後に Dashboard → Channels → Add から ホット追加する方法があります(推奨。gatewayの再起動が不要で、tokenも即座に暗号化されてconfigに書き込まれます)。
4.3 Bind / Port関連
Section titled “4.3 Bind / Port関連”| 変数 | デフォルト | 説明 |
|---|---|---|
DUDUCLAW_BIND |
0.0.0.0 |
Gatewayのlistenアドレス。コンテナ内では必ず 0.0.0.0 でなければ外部からアクセスできません |
DUDUCLAW_ALLOWED_ORIGINS |
(空) | Dashboard WebSocket/CORSの追加許可 Origin、カンマ区切り。tailnetやリバースプロキシ経由でdashboardを開き、WSが403になる場合に設定します(§13 トラブルシューティングを参照)。config.tomlの [gateway] allowed_origins とマージされます |
Portはenv varではなくcompose ファイル内で設定します。詳細は§5 Port設定の詳細を参照してください。
4.4 その他
Section titled “4.4 その他”| 変数 | 用途 |
|---|---|
TS_AUTHKEY |
Tailscale Funnelの起動時に自動でtailnetに参加させる(--profile tailscale と併用) |
5. Port設定の詳細
Section titled “5. Port設定の詳細”5.1 デフォルト
Section titled “5.1 デフォルト”docker-compose.yml:
services: duduclaw: ports: - "18789:18789" # HOST:CONTAINER environment: - DUDUCLAW_BIND=0.0.0.0- コンテナ内部:gatewayは常に
0.0.0.0:18789にbindされます。これは意図的な設計で、 コンテナ自体が隔離されたネットワーク空間であるため、localhostにbindすると外部からアクセスできなくなります。 - ホスト:
18789:18789によりホストの18789番portがコンテナの18789番portへ転送されます。
5.2 ホストportの変更
Section titled “5.2 ホストportの変更”最もよくあるケースは18789が既に使用中、または複数インスタンスが必要な場合です。左側の数字だけを変更します。
ports: - "28789:18789" # 外部からは28789でアクセスその後、dashboardとwebhook URLも新しいportに変更する必要があります。
curl http://localhost:28789/health右側の
18789(コンテナ内部port)は変更しないでください。変更する場合は~/.duduclaw/config.tomlの[gateway] portも同期して変更する必要があり、 entrypointは--yesで自動生成しているため、メンテナンスコストが上がります。
5.3 ローカルのみにbind(LANへの露出を避ける)
Section titled “5.3 ローカルのみにbind(LANへの露出を避ける)”デフォルトの ports: "18789:18789" は 0.0.0.0 にbindされるため、同一ネットワーク内の他のマシンからも接続できます。
ローカル専用にしたい場合(リバースプロキシと組み合わせる場合など):
ports: - "127.0.0.1:18789:18789"5.4 同一マシンでの複数インスタンス
Section titled “5.4 同一マシンでの複数インスタンス”同じマシンで2つのDuDuClawを動かす場合:
# ディレクトリA — 本番cd /srv/duduclaw-prod# ports: "18789:18789"docker compose up -d
# ディレクトリB — ステージングcd /srv/duduclaw-staging# ports: "28789:18789"# container_nameも変更し、衝突を避けるdocker compose up -dcontainer_name(デフォルト duduclaw-server)も忘れずに変更し、名前の衝突を避けてください。
6. 三大CLIの認証設定
Section titled “6. 三大CLIの認証設定”3つのruntimeにはそれぞれ2種類の認証経路があります。OAuth(追加費用なし、サブスクリプションプランを使用) と APIキー(従量課金のfallback)です。実務上は「まずOAuthを設定し、 保険としてAPIキーも1つ用意しておく」ことをお勧めします。
コンテナ内の3つのOAuth状態ディレクトリには、それぞれ独立したnamed volumeがあります。
| パス | Volume | CLI |
|---|---|---|
/home/duduclaw/.claude |
duduclaw-claude |
Claude Code |
/home/duduclaw/.codex |
duduclaw-codex |
Codex |
/home/duduclaw/.gemini |
duduclaw-gemini |
Gemini |
つまり、一度ログインすればコンテナを再構築してもログインし直す必要はありません。
6.1 Claude Code CLI
Section titled “6.1 Claude Code CLI”方法A:Setup Token(推奨)
Section titled “方法A:Setup Token(推奨)”Claude Codeは自動化シナリオ向けに、ブラウザのコールバックを必要としない長期有効tokenを提供しており、 コンテナ / CI / headless serverに適しています。
# ブラウザのある自分のマシンで実行する(コンテナ内ではない)npm install -g @anthropic-ai/claude-codeclaude setup-token# 画面の指示に従いブラウザでOAuthを完了する# 最後に CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-... が表示される生成されたtokenを .env に書き込みます。
CLAUDE_CODE_OAUTH_TOKEN=sk-ant-oat01-xxxxxxxx...そして:
docker compose up -dDuDuClawは起動時に環境変数を読み込み、claude CLIがこのtokenを認識して自動的にログインします。コンテナ内で何か操作する必要はありません。Tokenの有効期限は30日で、
期限の7日前からDuDuClawがdashboardに警告を表示します。
方法B:コンテナ内でのインタラクティブログイン
Section titled “方法B:コンテナ内でのインタラクティブログイン”Pro / Team / Maxのサブスクリプションがあり、そのquotaを使いたい場合:
# コンテナに入るdocker compose exec duduclaw bash
# コンテナ内で実行claude auth login# URLが表示されるので、ローカルのブラウザで開いて認可を完了する# 状態は /home/duduclaw/.claude/ に書き込まれる(duduclaw-claude volume)
# 確認claude auth statusexitvolumeに保存されているため、コンテナを再起動しても状態は保持されます。
方法C:APIキーFallback
Section titled “方法C:APIキーFallback”.env:
ANTHROPIC_API_KEY=sk-ant-...この経路は従量課金で、サブスクリプションを使い切ったりアカウントがrate-limitされたりした場合の保険として適しています。 DuDuClawのAccountRotatorが複数アカウント間で自動的にローテーションします。詳細は features/07-account-rotation.mdを参照してください。
6.2 Codex(OpenAI)CLI
Section titled “6.2 Codex(OpenAI)CLI”方法A:ChatGPT Plus/Pro OAuth
Section titled “方法A:ChatGPT Plus/Pro OAuth”docker compose exec duduclaw bashcodex login# ChatGPTアカウントのパスワードを入力するか、ブラウザの案内に従う# 状態は /home/duduclaw/.codex/ に書き込まれる(duduclaw-codex volume)exitこの方法はChatGPTのサブスクリプションquotaを使用し、追加のAPI費用は発生しません。
方法B:APIキーFallback
Section titled “方法B:APIキーFallback”.env:
OPENAI_API_KEY=sk-proj-...従量課金(OpenAI APIの料金体系)です。
6.3 Gemini(Google)CLI
Section titled “6.3 Gemini(Google)CLI”方法A:Google OAuth
Section titled “方法A:Google OAuth”docker compose exec duduclaw bashgemini auth# 画面の指示に従いローカルのブラウザでGoogleログインを完了する# 状態は /home/duduclaw/.gemini/ に書き込まれる(duduclaw-gemini volume)exitGoogleはGemini CLIに対して現在無料枠を提供しており、日常利用に適しています。
方法B:APIキーFallback
Section titled “方法B:APIキーFallback”.env:
GEMINI_API_KEY=AIza...Google AI Studioの料金体系で課金されます。
6.4 Agent単位でのRuntime指定
Section titled “6.4 Agent単位でのRuntime指定”各agentは自身の agent.toml で使用するruntimeを指定できます。
[runtime]preferred = "claude" # メインruntime:claude / codex / gemini / openai-compatfallback = "gemini" # Claudeが利用不可の際に自動切り替え完全な例とfailover戦略については features/13-multi-runtime.mdを参照してください。
指定がない場合、RuntimeRegistry は起動時にPATHをスキャンし、最初に見つかった利用可能なruntimeを選択します。
6.5 3つのCLIがすべて認識されているか確認
Section titled “6.5 3つのCLIがすべて認識されているか確認”docker compose exec duduclaw bash
# 3つともバージョンが表示されるはずclaude --versioncodex --versiongemini --version
# Claudeのログイン状態claude auth status7. データ永続化(Volumes)
Section titled “7. データ永続化(Volumes)”docker-compose.yml は4つのnamed volumeを宣言しています。
| Volume | 内容 | バックアップの推奨度 |
|---|---|---|
duduclaw-data |
メインデータ:config、agents、memory SQLite、logs、bus_queue.jsonl | 最重要。毎日バックアップ推奨 |
duduclaw-claude |
Claude CLI OAuth状態 | 中程度。失っても claude auth login をやり直せばよい |
duduclaw-codex |
Codex OAuth状態 | 中程度 |
duduclaw-gemini |
Gemini OAuth状態 | 中程度 |
さらにホスト側からマウントするパスがあります。
| パス | 用途 | 必要性 |
|---|---|---|
/var/run/docker.sock |
コンテナがホストのDocker daemonを呼び出しagent sandboxを作成するために使用 | 必須。container sandboxによる隔離実行に使用 |
7.1 バックアップ
Section titled “7.1 バックアップ”# メインデータをtar.gzにバックアップdocker run --rm \ -v duduclaw_duduclaw-data:/source:ro \ -v $(pwd):/backup \ alpine tar czf /backup/duduclaw-data-$(date +%F).tar.gz -C /source .7.2 復元 / 移行
Section titled “7.2 復元 / 移行”バックアップをターゲットマシンに配置し、同名のvolumeに復元します。
docker volume create duduclaw_duduclaw-datadocker run --rm \ -v duduclaw_duduclaw-data:/target \ -v $(pwd):/backup \ alpine tar xzf /backup/duduclaw-data-2026-04-22.tar.gz -C /target7.3 ホストディレクトリで置き換える(上級者向け)
Section titled “7.3 ホストディレクトリで置き換える(上級者向け)”データを直接ブラウズしたい場合は、named volumeをbind mountに置き換えられます。
volumes: - ./data/duduclaw:/home/duduclaw/.duduclaw - ./data/claude:/home/duduclaw/.claude - ./data/codex:/home/duduclaw/.codex - ./data/gemini:/home/duduclaw/.gemini - /var/run/docker.sock:/var/run/docker.sockホスト側ディレクトリのownerはUID 1000でなければならない点に注意してください(コンテナ内の duduclaw ユーザー)。
mkdir -p data/{duduclaw,claude,codex,gemini}sudo chown -R 1000:1000 data/8. ヘルスチェックと可観測性
Section titled “8. ヘルスチェックと可観測性”8.1 3つのhealth endpoint
Section titled “8.1 3つのhealth endpoint”| パス | 用途 | HTTP 200の条件 |
|---|---|---|
/health |
完全な状態(JSON) | 常に200と構造化された内容を返す |
/health/ready |
Readiness probe | agentsがすべてロード済み |
/health/live |
Liveness probe | processがまだ生きている |
Composeはデフォルトで /health をhealthcheckに使用します(30秒ごと、3回連続失敗でunhealthyと判定)。
8.2 状態の確認
Section titled “8.2 状態の確認”# Containerの状態docker compose ps
# リアルタイムlogdocker compose logs -f duduclaw
# 直近100行docker compose logs --tail=100 duduclaw
# Healthcheckの履歴docker inspect duduclaw-server --format '{{json .State.Health}}' | jq8.3 Prometheus Metrics
Section titled “8.3 Prometheus Metrics”Gatewayは GET /metrics エンドポイントを提供しています。指標一覧は
docs/deployment-guide.md §8を参照してください。
9. Watchtowerによる自動更新
Section titled “9. Watchtowerによる自動更新”docker-compose.yml にはWatchtowerサービスが組み込まれており、1時間ごとにイメージの更新を確認します。
注意:現在のcomposeファイルの
WATCHTOWER_SCOPE=duduclaw設定は 対応するlabelを持つコンテナのみを更新対象としますが、duduclawサービス自体には そのlabelが設定されていません。自動更新を有効にするには、services.duduclawに以下を追加してください。labels:- "com.centurylinklabs.watchtower.scope=duduclaw"または
WATCHTOWER_SCOPEを削除してください(すべてのコンテナが更新対象になり、範囲が広がります)。
自動更新を望まない場合は、watchtowerサービスのブロックをそのまま削除してください。
10. Channel Webhookには公開HTTPSが必要
Section titled “10. Channel Webhookには公開HTTPSが必要”LINE / WhatsApp / Feishu / Generic Webhookはいずれもインターネットからアクセス可能なHTTPS URL がなければメッセージを受信できません。DuDuClawが家庭用ネットワークやグローバルIPのないサーバーで動作している場合、 よく使われる方法は以下の通りです。
| 方法 | 適したシーン | コスト | ガイド |
|---|---|---|---|
| Tailscale Funnel | 家庭 / 開発 / 一時的な利用 | 無料 | §11 |
| Cloudflare Tunnel | 長期的な本番運用 | 無料(独自ドメインが必要) | deployment-guide §4 |
| ngrok | クイックデモ | 無料版はURLが変わる | deployment-guide §3 |
| リバースプロキシ(Caddy / Nginx) | 独自のグローバルIP+ドメイン | 自前でメンテナンスが必要 | deployment-guide §5 |
11. Tailscale Funnel(公開HTTPSをWebhookに提供)
Section titled “11. Tailscale Funnel(公開HTTPSをWebhookに提供)”Composeには既にTailscaleサービスが同梱されていますが、デフォルトでは tailscale profile配下にあり自動起動しません。
11.1 有効化
Section titled “11.1 有効化”# 1. Tailscale admin consoleでauth keyを生成する# https://login.tailscale.com/admin/settings/keys# "Reusable" + "Ephemeral" にチェックすることを推奨
# 2. .envに書き込むecho "TS_AUTHKEY=tskey-auth-xxxxxxx" >> .env
# 3. tailscale profileを起動docker compose --profile tailscale up -d
# 4. Tailscale admin consoleでこのマシンのFunnelを有効化# Machines → duduclaw → Enable Funnel
# 5. https URLを取得docker compose exec tailscale tailscale funnel status# https://duduclaw.your-tailnet.ts.net/ ← これがwebhookのprefixになるLINE webhook URLには https://duduclaw.your-tailnet.ts.net/webhook/line を設定します。
Tailscaleコンテナは現在
image: tailscale/tailscale:latestを使用しています。 本番環境では特定のdigestにpinすることを推奨します(composeファイルに既にTODOとして記載済みです)。
12. よく使うコマンド早見表
Section titled “12. よく使うコマンド早見表”# 起動 / 停止 / 再起動docker compose up -ddocker compose down # container停止+削除(volumeは削除されない)docker compose restart duduclaw
# イメージの再ビルド(コードやDockerfileの変更後)docker compose build --no-cache duduclawdocker compose up -d
# コンテナshellに入るdocker compose exec duduclaw bash
# 単発コマンドの実行docker compose exec duduclaw duduclaw agent listdocker compose exec duduclaw duduclaw cost summary
# Logdocker compose logs -f duduclawdocker compose logs --since 1h duduclaw
# クリーンアップdocker compose down -v # ⚠️ volumeも一緒に削除される。データは全て失われるdocker system prune -af # ⚠️ 未使用のimage / containerをすべて削除する13. トラブルシューティング
Section titled “13. トラブルシューティング”Containerは起動しているが curl localhost:18789/health がConnection refusedを返す
Section titled “Containerは起動しているが curl localhost:18789/health がConnection refusedを返す”原因:Gatewayがコンテナ内部のlocalhostにbindされており、ホストから到達できません。 確認方法:
docker compose exec duduclaw env | grep DUDUCLAW_BIND# DUDUCLAW_BIND=0.0.0.0 になっているはずもし空文字列であれば、composeファイルの environment: ブロックに追加してください。
docker compose up が Compiling duduclaw-gateway で止まる
Section titled “docker compose up が Compiling duduclaw-gateway で止まる”Rustのコンパイルは CPU/RAM を多く消費し、一般的なノートPCでの初回ビルドは10〜20分ほどかかります。 以降の変更はincremental cacheが効くため、通常1〜2分程度です。
メモリが不足している(4 GB未満)とOOM killedになる可能性があります。以下を検討してください。
- pre-buildイメージが提供されていればそれを使用する
- またはホスト側で事前に
cargo build --releaseを実行してバイナリを作り、Dockerfileを書き換えて 直接COPYする(上級者向け)
Claude CLIが “not logged in” と表示される
Section titled “Claude CLIが “not logged in” と表示される”確認の順序:
# 1. Env varが渡っているかdocker compose exec duduclaw env | grep -E "CLAUDE_CODE_OAUTH_TOKEN|ANTHROPIC_API_KEY"
# 2. Volumeが正しくマウントされているかdocker compose exec duduclaw ls -la ~/.claude/
# 3. CLI自体には何が見えているかdocker compose exec duduclaw claude auth statusよくある間違いは、.env を編集した後に docker compose up -d で container を再起動するのを忘れることです。
env varは起動時にのみ注入されるため、ホット変更は反映されません。
ステップ3はトークンが実際に機能していることを証明しません。
claude auth statusはCLAUDE_CODE_OAUTH_TOKEN環境変数が存在しさえすればloggedIn: trueを報告します——そのトークンが依然として認証できるかは 一切チェックしません。失効または組織で無効化されたトークンも、良好な トークンと同じようにこのチェックを通過します。認証情報が実際に機能して いるか確認するには、ダッシュボードのAccountsページでそのアカウントの 認証情報ステータスバッジを確認するか(未確認/認証情報が破損/トークン 無効/組織で無効化——ヘルシーなアカウントは何も表示しません)、 container内で実際にプローブを実行してください:ターミナルウィンドウ docker compose exec duduclaw claude -p "reply ok" --model haiku --max-turns 1 --output-format jsonJSON出力の
is_error/api_error_statusフィールドを確認します。
Dashboardには接続できるがagentが「まず claude auth status を実行してください」と返信する
Section titled “Dashboardには接続できるがagentが「まず claude auth status を実行してください」と返信する”これはv1.8.x以前のバージョンの残存メッセージです。v1.8.22以降は
FailureReason で分類されたzh-TWメッセージに変更されています。まだ表示される場合は:
docker compose exec duduclaw duduclaw --version# 1.8.22以上であることを確認。そうでなければ最新のmainをpullして再buildするDashboardがくるくる回り続ける、WebSocket 403
Section titled “Dashboardがくるくる回り続ける、WebSocket 403”症状:tailnet(*.ts.net)またはリバースプロキシのドメイン経由でdashboardを開くとHTTPページ自体は正常に読み込まれるが、
リアルタイムデータがくるくる回り続ける。ブラウザDevToolsのNetworkパネルでは /ws のアップグレードが403を返している。
原因:WebSocketの Origin allowlistはデフォルトでloopbackのみを含んでおり、外部ドメインが含まれていません。allowlistに
追加すれば解決します。
# composeのenvironment:、または.envDUDUCLAW_ALLOWED_ORIGINS=duduclaw.your-tailnet.ts.net,duduclaw.yourdomain.comまたは ~/.duduclaw/config.toml に記述します。
[gateway]allowed_origins = ["duduclaw.your-tailnet.ts.net"]再起動後、起動ログに有効になった追加originsが出力されます。詳細は deployment-guide §5 WebSocket Origin 許可リストを参照してください。
Channel webhookがagentをトリガーしない
Section titled “Channel webhookがagentをトリガーしない”- LINE / WhatsApp / FeishuはHTTPSが必要です。§10の設定を確認してください
- Dashboard → Channelsで該当channelの接続状態インジケーターを確認してください
- logを確認する:
docker compose logs -f duduclaw | grep -i webhook
Container sandboxがsub-agentを起動できない
Section titled “Container sandboxがsub-agentを起動できない”DuDuClawは docker.sock を通じてホストのDocker daemonを呼び出し、agent tasksを実行する隔離コンテナを作成します。失敗する場合:
# コンテナ内からsocketが使えるかテストするdocker compose exec duduclaw docker ps# ホスト上のcontainer一覧が見えるはずPermission deniedになる場合、多くはSELinux / AppArmorがブロックしています。Linuxでは以下を試してください。
volumes: - /var/run/docker.sock:/var/run/docker.sock:rw group_add: - "${DOCKER_GID:-999}" # ホストのdocker group GIDに合わせるコンテナ再構築後にOAuth状態が消える
Section titled “コンテナ再構築後にOAuth状態が消える”volumeが実際に存在するか確認してください。
docker volume ls | grep duduclaw# duduclaw_duduclaw-data# duduclaw_duduclaw-claude# duduclaw_duduclaw-codex# duduclaw_duduclaw-geminiもしどれかが欠けていれば、composeファイルが変更されたか、過去に docker compose down -v が実行されたことを意味します。
claude auth login / codex login / gemini auth を再度実行してください。
14. 関連ドキュメント
Section titled “14. 関連ドキュメント”- デプロイ方式の概要:docs/deployment-guide.md
- Multi-Runtimeアーキテクチャ:docs/features/13-multi-runtime.md
- Account Rotation:docs/features/07-account-rotation.md
- 開発ガイド:docs/development-guide.md