Articoli

I 3 ostacoli al primo avvio di Claude Code in un container Docker

Un’istanza pulita di Claude Code si arresta su tre schermate: onboarding, autorizzazione cartella e conferma chiave API. In ambienti automatizzati è necessario preconfigurarle in ~/.claude.json.

Un agente che stampa un banner e si ferma continua a emettere byte. In un container nuovo, Claude Code si arresta tre volte prima di compiere qualsiasi operazione.

Three gates in a row. An agent passes the first two and stops at the third.onboardingtrustapi keya fresh container
L’ordine è rigido. Risolvere le prime due non evita il blocco sulla terza.

I tre blocchi in ordine cronologico

PassaggioRichiesta
Assistente inizialeScelta del tema grafico
Fiducia nel workspaceConferma attendibilità cartella
Conferma chiave APIAutorizzazione utilizzo chiave API

Risolvere solo parte dei requisiti lascia l’agente bloccato al passaggio successivo.

Matrice delle misurazioni reali

Dati verificati con claude 2.1.220 in ambiente pulito:

Configurazione iniettataComportamento agente
NessunaBlocco sul selettore tema
Solo theme in settings.jsonAncora blocco sul selettore tema
hasCompletedOnboarding in .claude.jsonAvanza alla conferma cartella
+ hasTrustDialogAccepted sul percorso risoltoRaggiunge prompt ("Not logged in")
+ ANTHROPIC_API_KEY nell’ambienteBlocco su autorizzazione chiave
+ customApiKeyResponses.approvedPronto all’uso

Il problema dei percorsi reali

I percorsi in ~/.claude.json devono essere canonici e risolti, senza symlink.

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

La conferma della chiave

La conferma della chiave usa come default 2. No (recommended). Il CLI memorizza gli ultimi 20 caratteri come token di approvazione.

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

Scorciatoie inefficaci

Il flag --permission-mode bypassPermissions non scavalca la conferma di fiducia della cartella.

Un tema è estetica. Cancellare un file è una decisione critica.

Automatizziamo l’avvio ma preserviamo le protezioni sulle operazioni distruttive.

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

L’esecuzione nel cloud è spiegata in eseguire Claude Code nel cloud, e la gestione della connessione in osservare un terminale remoto.

Risposte dirette

Perché Claude Code si blocca al primo avvio nel container?

Perché attende scelte interattive su tema, fiducia nella cartella e chiave API.

Come eseguire Claude Code in modo non interattivo?

Precaricando ~/.claude.json con i parametri di onboarding e cartella e impostando le chiavi nelle variabili d’ambiente.

Come sono stati ottenuti questi dati?

Tramite test empirici con Claude Code 2.1.220 su veri pty.