Saltar al contenido

Reiniciar un contenedor de Docker en mal estado basado en Healthcheck

Solución:

El reinicio de la función de contenedor no saludable estaba en el PR 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 una mejora de RestartPolicy.

En este momento, puede utilizar esta solución para reiniciar automáticamente los contenedores no saludables: https://hub.docker.com/r/willfarrell/autoheal/

Aquí hay un archivo de composición de muestra:

version: '2'
services:
  autoheal:
    restart: always
    image: willfarrell/autoheal
    environment:
      - AUTOHEAL_CONTAINER_LABEL=all
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

Simplemente ejecutar docker-compose up -d en este

Para los contenedores independientes, Docker no tiene integración nativa para reiniciar el contenedor en caso de falla de verificación de estado, aunque podemos lograr lo mismo utilizando eventos de Docker y un script. La verificación de salud está mejor integrada con Swarm. Con la verificación de estado integrada en Swarm, cuando un contenedor en un servicio no está en buen estado, Swarm cierra automáticamente el contenedor en mal estado e inicia un nuevo contenedor para mantener el recuento de contenedores como se especifica en el recuento de réplicas de un servicio.

Puede intentar poner en su Dockerfile algo como esto:

HEALTHCHECK --interval=5s --timeout=2s CMD curl --fail http://localhost || kill 1

No olvides --restart always opción.

kill 1 matará el proceso con pid 1 en el contenedor y forzará la salida del contenedor. Por lo general, el proceso iniciado por CMD o ENTRYPOINT tiene pid 1.

Desafortunadamente, es probable que este método no cambie el estado del contenedor a insalubre, así que tenga cuidado con él.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *