記事

DockerコンテナでClaude Code初回起動時に直面する3つの技術課題

新規コンテナの Claude Code はオンボーディング、ディレクトリ信頼確認、APIキー確認で停止します。無人環境では ~/.claude.json に事前書き込みを行って自動化します。

起動してバナーを表示したまま待機しているエージェントもバイト列を出力するためログ上は動いているように見えますが、実際には3つのプロンプトで入力を待っています。

Three gates in a row. An agent passes the first two and stops at the third.onboardingtrustapi keya fresh container
順序は厳格です。前の2つを解決しても3つ目で確実に止まります。

出現順の3つの関門

関門質問内容
初期設定ウィザードテキストテーマの選択
ワークスペース信頼確認このプロジェクトを信頼しますか?
APIキー利用確認この API キーを使用しますか?

一部のみの解決では次の関門で停止してしまいます。

実測データ対照表

新規 HOME 環境下における claude 2.1.220 の実測値:

事前設定エージェントの挙動
設定なしテーマ選択で停止
settings.json に theme のみ設定依然としてテーマ選択で停止
.claude.json に hasCompletedOnboarding 設定信頼確認ダイアログへ進む
+ 解決済みパスの hasTrustDialogAcceptedプロンプト到達 ("Not logged in")
+ 環境変数 ANTHROPIC_API_KEYAPIキー確認で停止
+ customApiKeyResponses.approved即座に稼働開始可能

シンボリックリンク解決の罠

~/.claude.json に記録するパスは完全に解決された正規パスである必要があります。

export function trustKeyFor(root: string): string {
  try {
    return realpathSync(root);
  } catch {
    return root;
  }
}

APIキー確認の落とし穴

APIキー確認はデフォルトで 2. No (recommended) が選択されています。末尾20文字が承認トークンとして保存されます。

export function approvalTokenFor(apiKey: string): string {
  return apiKey.slice(-20);
}

無効な回避策

--permission-mode bypassPermissions ではディレクトリ信頼ダイアログをスキップできません。

テーマ設定は外観の好みに過ぎませんが、ファイル削除は重大な判断です。

起動の自動化は行いますが、危険なツール実行の確認は保持します。

const trust: ProjectTrust = {
  hasTrustDialogAccepted: true,
  hasCompletedProjectOnboarding: true,
  projectOnboardingSeenCount: 0,
  allowedTools: [],
};

クラウド環境での実行仕様は クラウドでの Claude Code 実行、接続制御は 自分がホストしていないターミナルを見守る技術 をご覧ください。

率直な答え

コンテナ内で Claude Code が停止する理由は?

テーマ選択、ディレクトリ信頼、APIキー確認の対話プロンプトへの入力待ちが発生するためです。

非対話的に Claude Code を起動するには?

起動前に ~/.claude.json へ信頼設定等を事前書き込みし、環境変数でキーを渡します。

計測環境は?

Claude Code 2.1.220 を用いた実 PTY 上での挙動と生成ファイル構造の解析です。