Artikel

Die 3 Hürden beim Erststart von Claude Code im Docker-Container

Ein frischer Claude-Code-Agent stoppt nacheinander beim Onboarding, der Verzeichnis-Vertrauensfrage und der API-Key-Bestätigung. In automatisierten Umgebungen müssen diese Werte vorab in ~/.claude.json geschrieben werden.

Ein Agent, der ein Banner ausgibt und wartet, erzeugt Bytes, die im Log wie Erfolg aussehen. In einem neuen Container stoppt Claude Code dreimal vor jeder eigentlichen Arbeit.

Three gates in a row. An agent passes the first two and stops at the third.onboardingtrustapi keya fresh container
Die Reihenfolge ist zwingend. Das Beantworten der ersten beiden verhindert nicht den Stopp bei der dritten.

Die drei Hürden in zeitlicher Abfolge

SchrittAbfrageinhalt
Ersteinrichtungs-AssistentAuswahl des Farbschemas / Themes
Workspace-VertrauensprüfungVertrauen Sie diesem Projektverzeichnis?
API-Key-BestätigungMöchten Sie diesen API-Schlüssel verwenden?

Unvollständige Vorkonfigurationen lassen den Agenten an der nächsten Hürde stranden.

Messmatrix aus der Praxis

Gemessen mit claude 2.1.220 in einer frischen HOME-Umgebung:

Gesetzte KonfigurationVerhalten des Agenten
KeineBlockiert bei Theme-Auswahl
Nur theme in settings.jsonWeiterhin blockiert bei Theme-Auswahl
hasCompletedOnboarding in .claude.jsonErreicht Vertrauensdialog
+ hasTrustDialogAccepted für aufgelösten PfadErreicht Prompt ("Not logged in")
+ ANTHROPIC_API_KEY in UmgebungBlockiert bei API-Key-Bestätigung
+ customApiKeyResponses.approvedVoll einsatzbereit

Die Falle mit relativen Pfaden

Pfadangaben in ~/.claude.json müssen zwingend kanonisch aufgelöst sein (ohne Symlinks).

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

Die Bestätigung des Schlüssels

Die Key-Abfrage wählt standardmäßig 2. No (recommended). Das CLI speichert die letzten 20 Zeichen als Genehmigungs-Token.

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

Unwirksame Abkürzungen

Der Parameter --permission-mode bypassPermissions umgeht den Vertrauensdialog nicht.

Ein Theme ist Kosmetik. Das Löschen von Dateien ist eine kritische Entscheidung.

Wir automatisieren die Einrichtung, belassen sensible Werkzeugfreigaben jedoch unter menschlicher Kontrolle.

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

Die Cloud-Ausführung wird in Claude Code in der Cloud ausführen beschrieben, die Verbindungskontrolle in ein Terminal beobachten.

Direkte Antworten

Warum bleibt Claude Code beim ersten Start im Container hängen?

Weil das CLI auf manuelle Eingaben zur Theme-Wahl, Verzeichnis-Freigabe und Key-Bestätigung wartet.

Wie startet man Claude Code vollautomatisch?

Indem Onboarding- und Trust-Zustände vorab in ~/.claude.json abgelegt und API-Schlüssel über Umgebungsvariablen bereitgestellt werden.

Wie wurden diese Erkenntnisse gewonnen?

Durch empirische PTY-Tests mit Claude Code 2.1.220 und Analyse der geschriebenen Konfigurationsdateien.