Sin Health Check en Docker
Sin una instrucción HEALTHCHECK, Docker y los orquestadores no pueden detectar cuando tu contenedor está corriendo pero roto — enrutando tráfico a una app muerta.
Cómo Funciona
Un contenedor puede estar en estado 'running' mientras la aplicación dentro se ha caído o tiene deadlock. Sin HEALTHCHECK, Docker marca el contenedor como saludable por defecto. Kubernetes y Docker Swarm siguen mandando tráfico. Los usuarios obtienen errores mientras el orquestador cree que todo está bien.
# MAL: sin HEALTHCHECK — el contenedor es 'saludable' aunque la app se caiga
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci
EXPOSE 3000
CMD ["node", "server.js"]# BIEN: HEALTHCHECK le dice a los orquestadores cuando la app está realmente lista
FROM node:20-alpine
WORKDIR /app
COPY . .
RUN npm ci
EXPOSE 3000
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \
CMD wget -qO- http://localhost:3000/health || exit 1
CMD ["node", "server.js"]Ejemplo Real
Varios deployments de alto tráfico han experimentado interrupciones silenciosas donde los contenedores aparecían como saludables en dashboards de Kubernetes mientras servían errores 500 a todos los usuarios — porque la app se había bloqueado pero el proceso del contenedor seguía vivo.
Cómo Prevenirlo
- Agrega un HEALTHCHECK a cada Dockerfile de producción que llame a un endpoint /health
- Implementa un endpoint /health en tu app que verifique dependencias críticas (conexión a DB, caché)
- Establece valores realistas de --interval, --timeout y --retries basados en el tiempo de inicio de tu app
- Prueba el comportamiento del health check cayendo intencionalmente la app y verificando que el contenedor se vuelva 'unhealthy'
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Docker Corriendo como Root
mediumLos contenedores que corren como root dan a cualquier vulnerabilidad de ejecución de código acceso root inmediato al contenedor — y potencialmente al host.
Docker Tag Latest
lowUsar FROM image:latest significa que un nuevo pull puede cambiar silenciosamente tu imagen base, rompiendo la reproducibilidad y potencialmente introduciendo vulnerabilidades.
Secrets en Dockerfile
criticalLos secrets agregados via ENV, ARG o COPY .env en un Dockerfile quedan grabados en las capas de la imagen y son legibles por cualquiera que descargue la imagen.
Puertos Expuestos Innecesarios
lowHacer EXPOSE de puertos que tu aplicación no usa realmente aumenta la superficie de ataque sin ningún beneficio.