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.
As três etapas de bloqueio
| Etapa | Solicitação |
|---|---|
| Assistente inicial | Escolha do tema visual |
| Confirmação de confiança | Você confia neste diretório? |
| Confirmação da chave de API | Deseja 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 injetada | Comportamento do agente |
|---|---|
| Nenhuma | Bloqueado no seletor de tema |
| Apenas theme em settings.json | Ainda bloqueado no seletor de tema |
| hasCompletedOnboarding em .claude.json | Avança para o diálogo de confiança |
| + hasTrustDialogAccepted no caminho resolvido | Avança ao prompt com "Not logged in" |
| + ANTHROPIC_API_KEY no ambiente | Bloqueado em "Deseja usar esta chave?" |
| + customApiKeyResponses.approved | Pronto 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.