Los 3 problemas al iniciar Claude Code por primera vez en un contenedor Docker
Un agente Claude Code nuevo en un contenedor se detiene ante tres preguntas sucesivas: la bienvenida, la confianza en el directorio y la confirmación de la clave de API. En un terminal desatendido esto bloquea el proceso, por lo que deben inyectarse previamente en su archivo de configuración.
Un agente que muestra un banner y se queda esperando sigue generando bytes, lo que en los registros parece un éxito. En un contenedor nuevo, Claude Code se detiene tres veces antes de realizar cualquier trabajo útil.
Las tres paradas en orden de aparición
| Parada | Pregunta formulada |
|---|---|
| Asistente de primer inicio | Selección de estilo de texto y tema |
| Comprobación de confianza | ¿Es este un proyecto en el que confías? |
| Validación de clave de API | ¿Deseas utilizar esta clave de API? |
Resolver solo una o dos de estas paradas permite avanzar al agente pero sigue impidiendo la ejecución del trabajo.
Matriz de mediciones reales
Comportamiento medido con claude 2.1.220 en un entorno HOME limpio:
| Configuración inyectada | Comportamiento del agente |
|---|---|
| Ninguna | Bloqueado en el selector de tema |
| Solo theme en settings.json | Aún bloqueado en el selector de tema |
| hasCompletedOnboarding en .claude.json | Alcanza el diálogo de confianza |
| + hasTrustDialogAccepted en la ruta resuelta | Llega al prompt con "Not logged in" |
| + ANTHROPIC_API_KEY en el entorno | Bloqueado en "¿Deseas utilizar esta clave de API?" |
| + customApiKeyResponses.approved | Alcanza el prompt listo para operar |
La trampa de la ruta resuelta
La confianza se almacena bajo projects[ruta] y la ruta debe estar completamente resuelta (canonical). En macOS, las carpetas temporales requieren resolver los enlaces simbólicos para que la CLI reconozca la autorización.
export function trustKeyFor(root: string): string {
try {
return realpathSync(root);
} catch {
return root;
}
}La aprobación de la clave
La confirmación de la clave de API es peligrosa porque su opción por defecto es 2. No (recommended). La CLI almacena únicamente los últimos veinte caracteres como token de aprobación.
export function approvalTokenFor(apiKey: string): string {
return apiKey.slice(-20);
}Dos atajos que no funcionan
El modificador --permission-mode bypassPermissions no salta el diálogo de confianza del directorio.
Un tema visual es una preferencia. Borrar un archivo es una decisión crítica.
Preconfiguramos la confianza del entorno pero mantenemos intactas las protecciones sobre herramientas sensibles.
const trust: ProjectTrust = {
hasTrustDialogAccepted: true,
hasCompletedProjectOnboarding: true,
projectOnboardingSeenCount: 0,
allowedTools: [],
};El funcionamiento en la nube se detalla en ejecutar Claude Code en la nube, y el control de conexión en observar un terminal remoto.
Respuestas directas
¿Por qué se bloquea Claude Code al iniciar en un contenedor?
Porque espera respuestas interactivas a la selección de tema, la confianza en la carpeta y la confirmación de la clave de API.
¿Cómo se ejecuta Claude Code de forma no interactiva?
Escribiendo el estado de onboarding y la confianza en ~/.claude.json antes del inicio e inyectando las credenciales en el entorno.
¿Cómo se midieron estos datos?
A través de una pty real con la versión 2.1.220 de Claude Code analizando los archivos generados por la CLI.