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.