64 votes

Redémarrage d'un conteneur docker insalubre basé sur healthcheck

J'utilise Docker version 17.09.0-ce Je vois que les conteneurs sont marqués comme malsains en cas d'échecs de vérification de l'état de santé.

Existe-t-il une option permettant de redémarrer le conteneur au lieu de conserver le conteneur en mauvaise santé?

79voto

Navrocky Points 56

Le redémarrage de malsain conteneur fonctionnalité a été à l'origine, PR (https://github.com/moby/moby/pull/22719), mais il a été retiré après une discussion, et considéré comme être effectué plus tard que l'amélioration de la RestartPolicy.

En ce moment, vous pouvez utiliser cette solution de contournement pour redémarrer automatiquement malsain conteneurs: https://hub.docker.com/r/willfarrell/autoheal/

Voici un exemple de fichier composer:

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

Il suffit d'exécuter docker-compose up -d sur cette

8voto

Freax Points 59

Pour les conteneurs autonomes, Docker ne dispose pas d'intégration native pour le redémarrer en cas d'échec de la vérification de l'état, même si nous pouvons obtenir les mêmes résultats à l'aide d'événements Docker et d'un script. Le bilan de santé est mieux intégré à Swarm. Avec Health Check intégré à Swarm, lorsqu'un conteneur dans un service est malsain, Swarm ferme automatiquement le conteneur malsain et démarre un nouveau conteneur pour conserver le nombre de conteneurs spécifié dans le nombre de réplicas d'un service.

2voto

Lea Klein Points 97

Docker a un couple de façons d'obtenir des détails sur le conteneur de la santé. Vous pouvez configurer des contrôles de santé et la façon dont souvent ils s'exécutent. Aussi, des contrôles de santé peut être exécuté sur des applications en cours d'exécution à l'intérieur d'un conteneur, comme http (ce serait d'utiliser curl --fail option.) Vous pouvez afficher l' health_status événement pour obtenir plus de détails.

Pour obtenir des informations détaillées sur la mauvaise conteneur de les inspecter de commande est très pratique, docker inspect --format='{{json .State.Health}}' container-name (voir https://blog.newrelic.com/2016/08/24/docker-health-check-instruction/ pour plus de détails.)

Vous devez résoudre le problème causant la "malsain" de la balise (à tout moment le bilan de santé de la commande s'exécute et obtient un code de sortie 1) en premier. Cela peut ou ne peut pas exiger que le Panneau de redémarrer le conteneur, en fonction de l'erreur. Si vous êtes du démarrage/redémarrage de votre contenants automatiquement, puis de piégeage les erreurs de démarrage ou à l'exploitation forestière et de la santé de vérifier l'état peut aider à corriger rapidement les erreurs. Vérifier le lien si vous êtes intéressé dans le démarrage automatique.

2voto

Freax Points 59

Selon https://codeblog.dotsandbrackets.com/docker-health-check/

Créer un conteneur et d'ajouter "restart: toujours".

Dans l'utilisation de la verification de la santé, de payer l'attention sur les points suivants:

Autonome, pour les conteneurs, le Panneau n'a pas l'intégration native de redémarrer le conteneur sur le bilan de santé de l'échec si nous pouvons obtenir le même à l'aide de Docker événements et un script. Bilan de santé pour mieux l'intégrer à l'Essaim. Avec contrôle de santé intégré de l'Essaim, lorsqu'un conteneur dans un service est malsain, l'Essaim s'arrête automatiquement le malsain conteneur et commence un nouveau conteneur pour maintenir le récipient compter comme spécifié dans la réplique de la numération d'un service.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X