- Inicio
- Contenedor de desarrollo
- Configuración
Configuración
Toda la configuración reside en el archivo .env en la raíz del proyecto. Este archivo está en gitignore — nunca se incluye en los commits.
Variables de Entorno
Sección titulada «Variables de Entorno»Proveedor de IA
Sección titulada «Proveedor de IA»El contenedor soporta dos modos de autenticación mutuamente excluyentes (en orden de prioridad):
- Proxy LiteLLM — establezca
LITELLM_BASE_URLyLITELLM_API_KEYpara enrutar a través de un proxy LiteLLM (ver más abajo). - Modo OAuth — establezca únicamente
CLAUDE_CODE_OAUTH_TOKEN(ver más abajo).
No combine los modos — use exactamente uno.
Claude Max (OAuth)
Sección titulada «Claude Max (OAuth)»| Variable | Descripción | Ejemplo |
|---|---|---|
CLAUDE_CODE_OAUTH_TOKEN | Token OAuth de una suscripción Claude Max | sk-ant-oat01-... |
Cuando se establece, Claude Code se autentica directamente con Anthropic usando OAuth — no se necesita clave API ni proxy. Obtenga su token desde la configuración de Claude Code o la consola de Anthropic.
Proxy LiteLLM
Sección titulada «Proxy LiteLLM»Si su proxy LiteLLM (u otro) ya habla la API nativa de Mensajes de Anthropic — incluyendo web_search, streaming y uso de herramientas — establezca LITELLM_BASE_URL con el dominio del proxy. El contenedor deriva automáticamente las URLs específicas del proveedor:
- Endpoint de Anthropic →
${LITELLM_BASE_URL}/anthropic(usado por Claude Code) - Endpoint compatible con OpenAI →
${LITELLM_BASE_URL}/openai/v1
| Variable | Descripción | Ejemplo |
|---|---|---|
LITELLM_BASE_URL | Dominio de su proxy LiteLLM (sin sufijo de ruta) | https://litellm.example.com |
LITELLM_API_KEY | Clave API para autenticación del proxy | your-api-key o por defecto litellm-proxy |
Los usuarios solo necesitan establecer el dominio — los sufijos de ruta del proveedor se añaden automáticamente.
En tiempo de ejecución, el punto de entrada deriva ANTHROPIC_API_KEY de LITELLM_API_KEY para que Claude Code pueda consumir la credencial del proxy sin requerir una variable separada orientada al usuario.
Los nombres de modelo no se remapean en este modo. Claude Code envía sus identificadores de modelo estándar (por ejemplo, claude-sonnet-4-6) y LiteLLM los enruta a su backend configurado.
Validación de Certificados TLS
Sección titulada «Validación de Certificados TLS»Por defecto, Node.js valida los certificados TLS para todas las conexiones HTTPS. Si su proveedor de API upstream usa un certificado autofirmado (común con proxies internos de Open WebUI o LiteLLM), puede desactivar la validación añadiendo esto a su archivo .env:
NODE_TLS_REJECT_UNAUTHORIZED=0Esto no se recomienda para uso en producción. Solo establezca esto cuando confíe en la ruta de red entre el contenedor y su endpoint de API.
Agentes de Codificación con IA
Sección titulada «Agentes de Codificación con IA»El contenedor incluye varios agentes de codificación con IA además de Claude Code:
| Agente | Comando | Proveedor |
|---|---|---|
| Codex | codex | Compatible con OpenAI |
| Pi | pi | Multi-proveedor (configurar en tiempo de ejecución) |
| Oh-My-Pi | omp | Multi-proveedor (configurar en tiempo de ejecución) |
Pi y Oh-My-Pi se instalan como paquetes npm globales. Codex es un binario independiente que se actualiza automáticamente en tiempo de ejecución.
Pantalla Remota (noVNC)
Sección titulada «Pantalla Remota (noVNC)»El contenedor ejecuta una pila de pantalla virtual para observar e interactuar con navegadores con interfaz gráfica. Consulte Pantalla Remota (noVNC) para instrucciones de conexión y variables de entorno (ENABLE_VNC, VNC_RESOLUTION, DISPLAY, NOVNC_HOST_PORT).
Chrome DevTools MCP
Sección titulada «Chrome DevTools MCP»El contenedor incluye un servidor Chrome DevTools MCP preconfigurado para automatización de navegador headless. Claude Code puede navegar páginas web, tomar capturas de pantalla e inspeccionar el DOM sin ninguna configuración adicional. Consulte Chrome DevTools MCP para más detalles.
| Variable | Descripción | Cómo Establecer |
|---|---|---|
GIT_AUTHOR_NAME | Nombre para commits de git | git config user.name |
GIT_AUTHOR_EMAIL | Email para commits de git | git config user.email |
Si git está configurado en su host, rellene automáticamente ambos valores:
echo "GIT_AUTHOR_EMAIL=$(git config user.email)" >> .envecho "GIT_AUTHOR_NAME=\"$(git config user.name)\"" >> .env| Variable | Descripción | Cómo Establecer |
|---|---|---|
SSH_PRIVATE_KEY | Clave privada codificada en Base64 | base64 < ~/.ssh/id_ed25519 |
GitHub CLI
Sección titulada «GitHub CLI»| Variable | Descripción | Cómo Establecer |
|---|---|---|
GH_TOKEN | Token de acceso personal de GitHub para el CLI gh y git HTTPS | gh auth token (si gh está instalado localmente) |
Cuando GH_TOKEN se establece en .env, el CLI gh se autentica automáticamente — no es necesario ejecutar gh auth login. El punto de entrada también ejecuta gh auth setup-git, que configura el asistente de credenciales de git para que git clone y git push por HTTPS funcionen sin claves SSH.
Si gh está instalado y autenticado en su máquina host, extraiga el token directamente:
echo "GH_TOKEN=$(gh auth token)" >> .envDe lo contrario, cree un token de acceso personal y añádalo manualmente. Tanto los tokens de granularidad fina (recomendados) como los tokens clásicos funcionan. Los tokens de granularidad fina le permiten limitar el acceso a repositorios específicos. Los tokens clásicos requieren el scope repo para acceso a repositorios privados.
Para verificar la autenticación dentro del contenedor:
gh auth statusCómo se Instalan las Herramientas
Sección titulada «Cómo se Instalan las Herramientas»Cada runtime de lenguaje, CLI y herramienta se instala directamente en el Dockerfile en tiempo de compilación de la imagen. La imagen precompilada se publica en ghcr.io/f5-sales-demo/devcontainer:latest con cada push a main, por lo que la mayoría de los usuarios nunca necesitan compilar localmente.
Ejecutar docker compose up -d descarga la imagen precompilada automáticamente. Para compilar localmente después de personalizar el Dockerfile, pase el archivo de compilación explícitamente:
docker compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildConsulte Desarrollo Local para más detalles.
Ejecutar podman-compose up -d descarga la imagen precompilada automáticamente. Para compilar localmente después de personalizar el Dockerfile, pase el archivo de compilación explícitamente:
podman-compose -f docker-compose.yml -f docker-compose.build.yml up -d --buildConsulte Desarrollo Local para más detalles.
El Dockerfile usa una compilación en dos etapas optimizada para el caché de capas de Docker. Consulte Desarrollo Local — Arquitectura de Compilación en Dos Etapas para el desglose completo de capas y detalles del caché de compilación.
Reconocimiento de Herramientas de Claude Code
Sección titulada «Reconocimiento de Herramientas de Claude Code»El contenedor incluye configuración incorporada que evita que Claude Code confunda los nombres de herramientas. El reconocimiento de herramientas se instala en dos niveles de memoria para defensa en profundidad:
- Política administrada (
/etc/claude-code/CLAUDE.md) — instalada en tiempo de compilación de Docker. Este es el nivel de mayor prioridad en la jerarquía de memoria de Claude Code y siempre se carga, incluso cuando existe unCLAUDE.mdde proyecto grande en el directorio de trabajo. - Memoria de usuario (
~/.claude/CLAUDE.md) — sembrada por el punto de entrada en el primer inicio. Proporciona una capa de respaldo y una copia visible y personalizable para los usuarios.
Prioridad de Niveles de Memoria
Sección titulada «Prioridad de Niveles de Memoria»Claude Code carga instrucciones desde múltiples niveles de memoria (de mayor a menor prioridad):
- Política administrada (
/etc/claude-code/) — Siempre se carga, no puede ser excluida - Memoria de proyecto (
./CLAUDE.md) — Se carga por directorio de proyecto - Memoria de usuario (
~/.claude/CLAUDE.md) — Se carga globalmente para todas las sesiones - Memoria local (
./CLAUDE.local.md) — Sobreescrituras personales por proyecto
Sin el nivel de Política administrada, el reconocimiento de herramientas en la Memoria de usuario puede ser desprioritizado cuando compite con un CLAUDE.md grande a nivel de proyecto, causando que Claude pierda el reconocimiento de sus nombres de herramientas en PascalCase. El nivel Administrado garantiza que el reconocimiento de herramientas siempre se cargue con la mayor prioridad.
Auto-prueba
Sección titulada «Auto-prueba»Ejecute la auto-prueba incorporada para verificar la configuración:
claude-self-testEsto verifica que todos los archivos de configuración estén en su lugar y contengan las referencias de herramientas esperadas.
Añadir Herramientas
Sección titulada «Añadir Herramientas»Para añadir herramientas a la imagen, edite el Dockerfile y recompile localmente. Consulte Desarrollo Local — Añadir Herramientas para instrucciones sobre cómo añadir paquetes APT, herramientas npm, herramientas pip y descargas de binarios.
Extensiones de VS Code
Sección titulada «Extensiones de VS Code»Las extensiones se configuran en .devcontainer/devcontainer.json bajo customizations.vscode.extensions y se instalan automáticamente al abrir en VS Code.
Persistencia de Datos
Sección titulada «Persistencia de Datos»Todos los datos residen en volúmenes con nombre — no se montan directorios del host:
| Volumen | Punto de Montaje | Contenido |
|---|---|---|
workspace | /workspace | Sus repositorios clonados y archivos de proyecto |
home | /home/vscode | Historial del shell, configuraciones de herramientas, cachés, claves SSH |
Ambos persisten a través de reinicios y reconstrucciones del contenedor. Ejecute docker compose pull para obtener la última imagen precompilada antes de reiniciar.
| Acción | Datos |
|---|---|
docker compose down | Preservados |
docker compose down -v | Eliminados |
Ambos persisten a través de reinicios y reconstrucciones del contenedor. Ejecute podman-compose pull para obtener la última imagen precompilada antes de reiniciar.
| Acción | Datos |
|---|---|
podman-compose down | Preservados |
podman-compose down -v | Eliminados |
Mapeo de Puertos
Sección titulada «Mapeo de Puertos»| Host | Contenedor | Servicio |
|---|---|---|
127.0.0.1:${NOVNC_HOST_PORT:-6080} | 6080 | Pantalla remota noVNC (solo localhost, sobreescriba con NOVNC_HOST_PORT) |
Los puertos están vinculados a 127.0.0.1 para que solo sean accesibles desde su máquina, no desde la red.