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 comounhealthy
. El valor predeterminado es 3. Si una verificación de estado falla pero la próxima pasa, el contenedor no pasará aunhealthy
. 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.