Ir al contenido

Solución de problemas

”Conflict. The container name is already in use”

Sección titulada «”Conflict. The container name is already in use”»
Ventana de terminal
docker rm -f devcontainer
docker compose up -d

La imagen puede estar desactualizada. Descargue la última versión y reinicie:

Ventana de terminal
docker compose pull
docker compose up -d

El entrypoint inicializa ~/.claude.json con las flags de onboarding. Si falta:

Ventana de terminal
echo '{"hasCompletedOnboarding": true}' > ~/.claude.json

Verifique qué valor está configurado actualmente:

Ventana de terminal
echo "$ANTHROPIC_API_KEY"

Causas comunes:

  • Clave del proxy LiteLLM faltante o inválida — si está usando el modo proxy, asegúrese de que LITELLM_API_KEY en .env contenga la credencial correcta del proxy, luego reinicie el contenedor para que el entrypoint pueda derivar ANTHROPIC_API_KEY.
  • Token OAuth o desajuste del modo proxy — use exactamente un modo de autenticación. Si CLAUDE_CODE_OAUTH_TOKEN está configurado, tiene prioridad sobre el modo proxy de LiteLLM.

Verifique que su clave de API esté configurada correctamente:

Ventana de terminal
echo "$ANTHROPIC_API_KEY"

Compruebe que funciona realizando una llamada directa a su proveedor.

El modelo está determinado por su proveedor y clave de API. Consulte la documentación de su proveedor para conocer los modelos disponibles.

El CLI gh requiere una variable de entorno GH_TOKEN. Agréguela a su archivo .env:

GH_TOKEN=ghp_your-token-here

Cree un token en github.com/settings/tokens. Los tokens de grano fino (recomendados) o los tokens clásicos con el alcance repo funcionan. Reinicie el contenedor después de actualizar .env.

Cuando GH_TOKEN está configurado, el entrypoint ejecuta gh auth setup-git para configurar el asistente de credenciales de git para HTTPS. Si las operaciones HTTPS fallan:

  1. Verifique que el token sea válido: gh auth status
  2. Compruebe que el asistente de credenciales esté configurado: git config --global credential.helper
  3. Reinicie el contenedor para volver a ejecutar el entrypoint

Ambos métodos de autenticación pueden coexistir en el contenedor:

  • SSH (SSH_PRIVATE_KEY en .env) — usa URLs git@github.com:. Requerido si su organización exige SSH.
  • HTTPS (GH_TOKEN en .env) — usa URLs https://github.com/. Configuración más sencilla, sin gestión de claves.

Si ambos están configurados, git usa el protocolo que coincida con la URL del remoto. Para cambiar un clon existente:

Ventana de terminal
# SSH a HTTPS
git remote set-url origin https://github.com/owner/repo.git
# HTTPS a SSH
git remote set-url origin git@github.com:owner/repo.git

”Permission denied” en /workspace o /home

Sección titulada «”Permission denied” en /workspace o /home»
Ventana de terminal
sudo chown -R $(id -u):$(id -g) /workspace ~

El entrypoint configura automáticamente un prefijo global de npm con permisos de escritura para el usuario en ~/.npm-global, por lo que los comandos npm install -g en tiempo de ejecución deberían funcionar sin sudo. Si aún ve errores EACCES, aplique la corrección manualmente:

Ventana de terminal
mkdir -p ~/.npm-global
npm config set prefix ~/.npm-global
export PATH="$HOME/.npm-global/bin:$PATH"

La primera compilación descarga la imagen base (~1 GB). Las compilaciones posteriores usan caché. Si es lento cada vez:

Ventana de terminal
docker builder prune
Ventana de terminal
docker system prune -a --volumes

Advertencia: Esto elimina todos los contenedores, imágenes y volúmenes no utilizados, no solo los de este proyecto.

No se puede acceder a internet desde dentro del contenedor

Sección titulada «No se puede acceder a internet desde dentro del contenedor»
Ventana de terminal
ping -c 1 8.8.8.8
nslookup google.com
curl -I https://github.com

Si el DNS falla, agregue a /etc/docker/daemon.json en el host:

{
"dns": ["8.8.8.8", "8.8.4.4"]
}

Luego reinicie Docker.

Es posible que Xvfb no haya iniciado. Verifique dentro del contenedor:

Ventana de terminal
ps aux | grep Xvfb

Si no está ejecutándose, compruebe que ENABLE_VNC no esté configurado como false y reinicie el contenedor.

Error “Cannot open display” o “No display”

Sección titulada «Error “Cannot open display” o “No display”»

La variable de entorno DISPLAY puede no estar configurada. Verifique:

Ventana de terminal
echo "$DISPLAY"

Debería ser :99. Si está vacía, agregue DISPLAY=:99 a su .env o devcontainer.json y reinicie.

Es posible que noVNC no esté ejecutándose. Verifique dentro del contenedor:

Ventana de terminal
ps aux | grep -E 'novnc|websockify'

Si no está ejecutándose, verifique que ENABLE_VNC sea true (el valor predeterminado) y revise los registros del contenedor:

Ventana de terminal
docker compose logs dev | grep -i vnc

Cambie el puerto del host en docker-compose.yml:

ports:
- "127.0.0.1:16080:6080"

La instancia compartida de Chrome debería estar ejecutándose en el puerto 9222. Verifique dentro del contenedor:

Ventana de terminal
# ¿Está Chrome ejecutándose?
curl http://localhost:9222/json/version
# Verificar los registros de Chrome
cat ~/.local/share/chrome-browser/chrome.log
# Verificar el enlace simbólico
ls -la /opt/google/chrome/chrome
# Reiniciar Chrome manualmente
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

Si el enlace simbólico falta, descargue la última imagen y reinicie el contenedor.

Con la arquitectura de navegador compartido, los errores de bloqueo de perfil no deberían ocurrir. Si aparece uno, un proceso obsoleto de Chrome puede estar manteniendo el bloqueo:

Ventana de terminal
# Terminar cualquier proceso obsoleto de Chrome
pkill -f 'chrome.*remote-debugging-port' || true
# Eliminar el archivo de bloqueo
rm -f ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock
# Reiniciar Chrome
. /usr/local/lib/chrome-browser.sh
start_chrome_browser

El servidor chrome-devtools-mcp ahora está registrado globalmente en ~/.claude/settings.json. Si tiene un .mcp.json por repositorio que también lo registra, verá herramientas duplicadas. Elimine la entrada chrome-devtools-mcp de los archivos .mcp.json por repositorio:

Ventana de terminal
# Verificar la configuración por repositorio
cat .mcp.json

Elimine la clave chrome-devtools-mcp de cualquier .mcp.json por repositorio para usar el registro global.

Ventana de terminal
docker compose down -v
docker rm -f devcontainer 2>/dev/null
docker compose pull
docker compose up -d

Esto destruye todos los datos en los volúmenes. Necesitará volver a clonar repositorios y reconfigurar herramientas.