Cómo (y por qué) agregar comprobaciones de estado a sus contenedores Docker

Contenidos

Logotipo de Docker azul sobre un fondo morado

Ha creado su imagen de Docker, la ha enviado a su registro y ha iniciado un nuevo contenedor en producción. Todo funciona mientras regresa a casa por el día, pero se encuentra con informes de interrupciones cuando regresa a la mañana siguiente. Su contenedor aún se está ejecutando, pero no atiende solicitudes.

Este escenario puede resultar incómodo para los equipos de operaciones que trabajan con Docker. A continuación, le mostramos cómo usar la función de verificación de estado de Docker para obtener datos precisos sobre la disponibilidad de sus servicios.

Cómo funcionan las verificaciones de estado

Los controles de salud permiten un contenedor para exponer la disponibilidad de su carga de trabajo. Esto se distingue de si el contenedor es corriendo. Si su base de datos deja de funcionar, su servidor de API no podrá manejar solicitudes, aún cuando su contenedor Docker aún se esté ejecutando.

Esto genera experiencias inútiles durante la resolución de problemas. Un simple docker ps informaría el contenedor como disponible. Agregar una verificación de estado extiende la docker ps salida para incluir el estado verdadero del contenedor.

Configura las comprobaciones de estado del contenedor en su Dockerfile. Esto acepta un comando que el demonio de Docker ejecutará cada 30 segundos. Docker utiliza el código de salida del comando para establecer la salud de su contenedor:

  • 0 – El recipiente está sano y funcionando con normalidad.
  • 1 – El contenedor no es saludable; es factible que la carga de trabajo no esté funcionando.
  • 2 – Este código de estado está reservado por Docker y no debe utilizarse.

Cuando HEALTHCHECK está presente en un Dockerfile, verá la salubridad del contenedor en el STATUS columna cuando corres docker ps.

La salubridad no se comprueba inmediatamente cuando se crean los contenedores. El estado se mostrará como starting antes de que se ejecute la primera comprobación. Esto le da tiempo al contenedor para ejecutar cualquier tarea de inicio. Un contenedor con una verificación de estado aprobada se mostrará como healthy; muestra un contenedor insalubre unhealthy.

Escribir comandos de verificación de estado

Las comprobaciones de estado del contenedor se configuran con el HEALTHCHECK instrucción en su Dockerfile. Debe utilizar un comando de verificación de estado que sea apropiado para su contenedor. Para servidores web, curl le ofrece una forma simple de realizar una comprobación básica de preparación. Haga ping a un punto final conocido que debería estar disponible siempre que su servicio esté activo.

FROM nginx:latest
HEALTHCHECK CMD curl --fail http://localhost/api/healthcheck || exit 1

Este ejemplo marcaría el contenedor como insalubre si su servidor /api/healthcheck el punto final emitió un estado de error.

Puedes utilizar docker inspect para ver el resultado de los comandos de verificación de estado. Esto es útil cuando está depurando su HEALTHCHECK instrucción.

docker inspect --format="{{json .State.Health}}" my-container

Reemplazar my-container con la identificación o el nombre del contenedor que desea inspeccionar. Estos detalles se muestran en docker ps producción.

Personalización de comprobaciones de estado

Docker le posibilita personalizar la frecuencia de las comprobaciones de estado. Además puede modificar los criterios que marcan un contenedor como insalubre.

Hay cuatro opciones disponibles:

  • --interval – Determinar el tiempo entre controles de salud. Esto le posibilita anular el valor predeterminado de 30 segundos. Utilice un intervalo más alto para incrementar el tiempo entre comprobaciones. Esto ayuda si tiene un servicio de baja prioridad donde las verificaciones de estado regulares pueden afectar el rendimiento. Utilice una frecuencia más regular para los servicios críticos.
  • --start-period – Establezca la duración después de que se inicie un contenedor cuando se deben ignorar las verificaciones de estado. El comando se seguirá ejecutando, pero no se contará un estado incorrecto. Esto le da tiempo a los contenedores para completar los procedimientos de inicio.
  • --retries – Esto le posibilita requerir múltiples fallas sucesivas antes de que un contenedor se marque como unhealthy. El valor predeterminado es 3. Si una verificación de estado falla pero la próxima pasa, el contenedor no pasará a unhealthy. Se volverá insalubre después de tres comprobaciones fallidas consecutivas.
  • --timeout – Determinar el tiempo de espera para los comandos de verificación de estado. Docker tratará la verificación como fallida si el comando no sale dentro de este período de tiempo.

Las alternativas se pasan como banderas al HEALTHCHECK instrucción. Suminístrelos antes del comando de verificación de estado:

HEALTHCHECK --interval=60s --retries=5 CMD curl --fail http://localhost || exit 1

Esta configuración indica a Docker que se ejecute curl cada 60 segundos. El contenedor se marcará como insalubre si cinco pruebas consecutivas disponen un código de salida distinto de cero.

Formato de comando

los HEALTHCHECK la sintaxis del comando admite una simple CMD o un estilo de punto de entrada exec capacitación. Además puedes pasar NONE en lugar de CMD para deshabilitar los controles de salud:

HEALTHCHECK NONE

Esto le posibilita inhibir las comprobaciones de estado de su imagen base. Cada HEALTHCHECK declaración anula cualquier instrucción anterior en las capas de su imagen.

¿Qué pasa con Docker Compose?

Docker Compose además admite definiciones de verificación de estado. Agrega un healthcheck sección a su servicio :.

version: "3"
services:
  app:
    image: nginx:latest
    ports:
      - 80:80
    healthcheck:
      test: curl --fail http://localhost || exit 1
      interval: 10s
      retries: 5
      start_period: 5s
      timeout: 10s

los test clave establece el comando a ejecutar. Las otras claves se asignan a los parámetros aceptados por Dockerfile HEALTHCHECK instrucción.

Resumen

Determinar un HEALTHCHECK La instrucción facilita el diagnóstico de un contenedor que se porta mal. Puede realizar un seguimiento de la preparación de su carga de trabajo independientemente del estado «en ejecución» del contenedor.

Las comprobaciones de estado son compatibles con cualquier comando que emita un 0 o 1 código de salida. Puedes utilizar comandos comunes como curl y ping para inspeccionar bases de datos y servicios web. Para un control más avanzado, escriba un script dedicado e inclúyalo en sus imágenes.

Suscribite a nuestro Newsletter

No te enviaremos correo SPAM. Lo odiamos tanto como tú.