web-dev-qa-db-fra.com

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é?.

30
Govind Kailas

Le redémarrage de la fonctionnalité de conteneur non conforme à la santé figurait dans le PR d'origine ( https://github.com/moby/moby/pull/22719 ), mais il a été supprimé après une discussion et considéré comme une amélioration ultérieure de RedémarrerPolicy.

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

Voici un exemple de fichier de composition:

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 ce

47
Navrocky

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 la même chose en utilisant des événements Docker et 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, comme spécifié dans le nombre de réplicas d'un service.

3
Freax

Docker dispose de plusieurs moyens pour obtenir des détails sur la santé des conteneurs. Vous pouvez configurer les contrôles de santé et leur fréquence d'exécution. En outre, des vérifications de l'état peuvent être exécutées sur des applications s'exécutant dans un conteneur, tel que http (ceci utiliserait l'option curl --fail.) Vous pouvez afficher l'événement health_status Pour obtenir des détails.

Pour des informations détaillées sur un conteneur insalubre, la commande inspect est très utile, 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 la condition d'erreur à l'origine de la balise "insalubre" (à chaque fois que la commande de vérification de l'état de santé s'exécute et obtient un code de sortie de 1) en premier. Cela peut nécessiter ou non que Docker redémarre le conteneur, en fonction de l'erreur. Si vous démarrez/redémarrez votre conteneurs automatiquement , alors capturer les erreurs de démarrage ou les consigner et l'état de la vérification de l'intégrité peut vous aider à résoudre rapidement les erreurs. Vérifiez le lien si vous êtes intéressé par le démarrage automatique.

1
Lea Klein

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

Créez un conteneur et ajoutez "restart: always".

Dans l'utilisation de healthcheck, faites attention aux points suivants:

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 la même chose en utilisant des événements Docker et 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, comme spécifié dans le nombre de réplicas d'un service.

0
Freax