pricing - Reiniciando un contenedor de docker insalubre basado en healthcheck
docker tag (4)
Estoy usando la Docker version 17.09.0-ce
. Veo que los contenedores están marcados como no saludables en caso de fallas en el control de estado.
¿Existe una opción para reiniciar el contenedor en lugar de mantener el contenedor como poco saludable?
De acuerdo con https://codeblog.dotsandbrackets.com/docker-health-check/
Crear contenedor y agregar "reiniciar: siempre".
En el uso de HealthCheck, preste atención a los siguientes puntos:
Para los contenedores independientes, Docker no tiene integración nativa para reiniciar el contenedor en caso de error de comprobación de estado, aunque podemos lograr lo mismo utilizando eventos de Docker y un script. El chequeo de salud está mejor integrado con Swarm. Con el control de estado integrado en Swarm, cuando un contenedor en un servicio no es saludable, Swarm automáticamente cierra el contenedor insalubre e inicia un nuevo contenedor para mantener el conteo de contenedores como se especifica en el conteo de réplica de un servicio.
Docker tiene un par de maneras de obtener detalles sobre la salud del contenedor. Puede configurar las comprobaciones de estado y la frecuencia con la que se ejecutan. Además, las comprobaciones de estado se pueden ejecutar en aplicaciones que se ejecutan dentro de un contenedor, como http (esto curl --fail
opción curl --fail
). Puede ver el evento health_status
para obtener detalles.
Para obtener información detallada sobre un contenedor insalubre, el comando inspeccionar es útil, docker inspect --format=''{{json .State.Health}}'' container-name
(consulte https://blog.newrelic.com/2016/08/24/docker-health-check-instruction/ para más detalles.)
Debe resolver la condición de error que causa la etiqueta "no saludable" (cada vez que se ejecuta el comando de comprobación de estado y obtiene un código de salida de 1) primero. Esto puede o no requerir que Docker reinicie el contenedor, dependiendo del error. Si está iniciando / reiniciando sus contenedores automáticamente , entonces ya sea atrapando los errores de inicio o registrándolos, el estado de la verificación de estado puede ayudar a solucionar los errores rápidamente. Compruebe el enlace si está interesado en el inicio automático.
El reinicio de la característica del contenedor de uncealty se realizó en el RP original ( https://github.com/moby/moby/pull/22719 ), pero se eliminó después de una discusión y se consideró que se haría más tarde como mejora de RestartPolicy.
En este momento, puede utilizar esta solución para reiniciar automáticamente los contenedores que no son seguros: https://hub.docker.com/r/willfarrell/autoheal/
Aquí hay un ejemplo de archivo de composición:
version: ''2''
services:
autoheal:
restart: always
image: willfarrell/autoheal
environment:
- AUTOHEAL_CONTAINER_LABEL=all
volumes:
- /var/run/docker.sock:/var/run/docker.sock
Simplemente ejecuta docker-compose up -d
en este
Para los contenedores independientes, Docker no tiene integración nativa para reiniciar el contenedor en caso de error de comprobación de estado, aunque podemos lograr lo mismo utilizando eventos de Docker y un script. El chequeo de salud está mejor integrado con Swarm. Con el control de estado integrado en Swarm, cuando un contenedor en un servicio no es saludable, Swarm automáticamente cierra el contenedor insalubre e inicia un nuevo contenedor para mantener el conteo de contenedores como se especifica en el conteo de réplica de un servicio.