Artigos

Os 3 desafios ao iniciar o Claude Code pela primeira vez em contêiner Docker

O Claude Code para diante de três telas na primeira execução: onboarding, confiança na pasta e confirmação da chave de API. Sem intervenção manual o processo trava, exigindo pré-configuração.

Um agente que imprime um cabeçalho e fica parado continua emitindo bytes, parecendo ativo nos logs. Em um contêiner novo, o Claude Code para três vezes antes de produzir código.

Three gates in a row. An agent passes the first two and stops at the third.onboardingtrustapi keya fresh container
A ordem é fixa. Responder às duas primeiras não impede o travamento na terceira.

As três etapas de bloqueio

EtapaSolicitação
Assistente inicialEscolha do tema visual
Confirmação de confiançaVocê confia neste diretório?
Confirmação da chave de APIDeseja usar esta chave de API?

Resolver parcialmente essas etapas mantém o agente travado.

Matriz de testes práticos

Medições em ambiente limpo com claude 2.1.220:

Configuração injetadaComportamento do agente
NenhumaBloqueado no seletor de tema
Apenas theme em settings.jsonAinda bloqueado no seletor de tema
hasCompletedOnboarding em .claude.jsonAvança para o diálogo de confiança
+ hasTrustDialogAccepted no caminho resolvidoAvança ao prompt com "Not logged in"
+ ANTHROPIC_API_KEY no ambienteBloqueado em "Deseja usar esta chave?"
+ customApiKeyResponses.approvedPronto para operação

O problema do caminho real

A permissão em ~/.claude.json exige caminhos canônicos resolvidos, sem links simbólicos.

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

Aprovação da chave

A confirmação da chave tem como padrão 2. No (recommended). A CLI armazena apenas os 20 caracteres finais como token de aprovação.

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

Atalhos ineficazes

O parâmetro --permission-mode bypassPermissions não ignora a confirmação de confiança do diretório.

Um tema é apenas estética. Apagar um arquivo é uma decisão crítica.

Liberamos a inicialização do ambiente mas preservamos a segurança em comandos destrutivos.

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

A execução na nuvem é explicada em rodar Claude Code na nuvem, e a gestão de conexão em observar um terminal remoto.

Respostas diretas

Por que o Claude Code trava ao iniciar em contêineres?

Porque aguarda escolhas interativas de tema, permissão de diretório e validação da chave de API.

Como rodar o Claude Code de forma não interativa?

Gravando os dados de onboarding e confiança em ~/.claude.json antes do boot e injetando as credenciais no ambiente.

Como foram feitas as medições?

Em pty real com a versão 2.1.220 do Claude Code analisando os arquivos gerados.