Skip to content
BotServBotServ
DockerHealthcheckMonitoringContainerRestart

Healthchecks para Docker Container

Entiende y configura Docker Healthchecks. Monitoreo, política de reinicio y ejemplos prácticos.

S

schutzgeist

4 min read
Healthchecks para Docker Container

Verificación de salud en contenedores Docker

Qué abarca este artículo sobre verificación de salud en Docker

  • Qué es una verificación de salud.
  • Cómo definir verificaciones de salud en Dockerfiles y Compose.
  • Cómo responde Docker ante fallos.
  • Ejemplos prácticos para servicios web, bases de datos y Ollama.
  • Consejos y errores comunes.

Introducción: Verificación de salud en contenedores Docker

Un contenedor Docker puede estar en ejecución sin que la aplicación en su interior esté realmente lista o funcionando correctamente. Las verificaciones de salud permiten comprobar periódicamente el estado de una aplicación. Docker marca entonces el contenedor como healthy o unhealthy y puede reiniciarlo automáticamente o generar alertas cuando sea necesario.

Este artículo muestra cómo funcionan las verificaciones de salud y cómo configurarlas para servicios de IA típicos como Ollama, Open WebUI o bases de datos.

Conceptos clave

  • Healthcheck: Verificación periódica del estado de salud de la aplicación.
  • Interval: Tiempo entre dos verificaciones.
  • Timeout: Tiempo máximo de espera para obtener el resultado de la verificación.
  • Start Period: Tiempo durante el cual se ignoran los fallos para permitir el arranque.
  • Retries: Número de intentos fallidos permitidos antes de que el contenedor sea marcado como unhealthy.
  • Restart Policy: Comportamiento al reiniciar.
  • Exit Code: Valor devuelto por el comando de verificación. 0 significa saludable, 1 significa no saludable.

Por qué son importantes las verificaciones de salud

  • Los contenedores se marcan como listos solo cuando la aplicación se ejecuta.
  • Los errores se detectan temprano.
  • Los proxies inversos y equilibradores de carga pueden preferir contenedores saludables.
  • Los reinicios automáticos aumentan la disponibilidad.
  • El monitoreo puede reaccionar al estado de salud.

Verificación de salud en Dockerfile

FROM nginx:latest

HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
  CMD curl -f http://localhost/ || exit 1

Esta verificación comprueba cada 30 segundos si el servidor web local responde.

Verificación de salud en Docker Compose

services:
  web:
    image: nginx
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s
    restart: unless-stopped

Consultar el estado

docker ps

La columna STATUS muestra (healthy) o (unhealthy).

Para más detalle:

docker inspect --format='{{.State.Health.Status}}' containername

Ejemplo: Ollama

services:
  ollama:
    image: ollama/ollama
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:11434/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 30s
    volumes:
      - ollama-data:/root/.ollama
    restart: unless-stopped

Esta verificación comprueba si la API de Ollama es accesible.

Ejemplo: Open WebUI

services:
  open-webui:
    image: ghcr.io/open-webui/open-webui:main
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 60s
    restart: unless-stopped

Ejemplo: PostgreSQL

services:
  postgres:
    image: postgres:16
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: appdb
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U user -d appdb"]
      interval: 10s
      timeout: 5s
      retries: 5
      start_period: 20s
    restart: unless-stopped

Verificaciones más complejas

A veces una simple verificación de estado HTTP no es suficiente. Puedes usar scripts propios que verifiquen si funciones críticas están operativas:

#!/bin/sh
if curl -f http://localhost/api/health | grep -q '"ok":true'; then
  exit 0
else
  exit 1
fi

Coloca el script en el contenedor e invócalo como verificación de salud.

Políticas de reinicio

PolíticaComportamiento
noNunca reiniciar.
on-failureSolo en caso de código de error.
alwaysReiniciar siempre.
unless-stoppedReiniciar a menos que se detenga manualmente.

Combinación recomendada:

restart: unless-stopped

Desactivar la verificación de salud

Si una imagen preconfigurada tiene una verificación de salud inapropiada, puedes sobrescribirla:

services:
  app:
    image: irgendein-image
    healthcheck:
      disable: true

Consejos

  • La verificación de salud debe comprobar un endpoint significativo, no solo el proceso.
  • Elige la duración de inicio de forma generosa.
  • No establezcas el intervalo demasiado corto para conservar recursos.
  • Ajusta el timeout al tiempo de respuesta real.
  • Monitorea los logs de las verificaciones de salud.
  • Mantén los scripts de verificación de salud personalizados breves.

Errores comunes

  • Intervalo demasiado estricto: Alta carga por verificaciones constantes.
  • Duración de inicio demasiado corta: El contenedor se marca como no saludable durante el arranque.
  • Protocolo incorrecto: Verificar HTTPS cuando se ejecuta HTTP.
  • Herramientas faltantes en la imagen: curl no está disponible, el script falla.
  • Solo verificar el proceso: La aplicación está bloqueada, pero el proceso sigue ejecutándose.
  • Sin política de reinicio: Los contenedores no saludables continúan funcionando.
  • Salidas de verificación en logs: Entradas de log confusas.

Enlaces y recursos adicionales

FAQ: Verificación de salud en Docker

¿Necesita cada contenedor una verificación de salud? No, pero se recomienda para servicios importantes.

¿Con qué frecuencia se ejecuta una verificación de salud? Por defecto cada 30 segundos, pero es configurable.

¿Qué sucede cuando el estado es unhealthy? Docker muestra el estado. Con una política de reinicio, el contenedor puede reiniciarse.

¿Puedo usar comandos personalizados? Sí, se permiten verificaciones arbitrarias en shell o CMD.

¿Son las verificaciones de salud lo mismo que Readiness Probes en Kubernetes? Similar, pero Kubernetes también ofrece Readiness y Startup Probes adicionales.

Fuentes y lecturas complementarias

Resumen: Verificación de salud en contenedores Docker

Las verificaciones de salud son una forma sencilla de monitorear la disponibilidad real de los contenedores Docker. Se pueden definir en el Dockerfile o en Docker Compose y funcionan estrechamente con las políticas de reinicio. Para servicios de IA importantes como Ollama, Open WebUI o bases de datos, conviene configurar verificaciones específicas de endpoints. Lo fundamental es elegir intervalos sensatos, permitir tiempos de inicio suficientes y usar métodos de verificación precisos. Quién implementa verificaciones de salud desde el principio mejora notablemente la estabilidad de todo el stack.

Volver al blog
Share:

Entradas relacionadas