<!--
  canonical-url: https://www.avonture.be/fr/blog/docker-healthy
  published:     2023-12-12
  This is a static plain-Markdown mirror generated at build time.
  Visit the canonical URL above for the fully rendered page, with images and interactive components.
-->

# Obtenez les informations de santé de vos containers en cours d'exécution

> Obtenez instantanément les informations de santé de vos containers Docker. Cet article présente un script bash utilisant docker ps et docker inspect pour des vérifications rapides.

---
![Obtenez les informations de santé de vos containers en cours d'exécution](/img/v2/docker_tips.webp)

**TL;DR**

Cet article partage un script Bash qui parcourt tous les containers Docker (`docker container list --all`) et rapporte l'état de santé de chacun via le champ `State.Health` de `docker inspect`. Vous obtenez un aperçu rapide des containers sains, en mauvaise santé, ou sans healthcheck configuré (`null`).

Quand vous avez quelques containers qui tournent sur votre machine, vous pouvez récupérer rapidement les informations de santé avec `docker ps` et sa réponse `State.Health`.

Dans cet article, nous allons voir comment créer un script bash qui pourra servir de base pour d'autres besoins.

## La vue d'ensemble en un coup d'œil {#the-one-glance-overview}

Voici ce que j'obtiens sur ma machine, en une seule commande :

![Docker health checks](./images/healthy.webp)

J'ai quelques containers qui tournent, beaucoup sont `healthy`, ce qui veut dire qu'ils fonctionnent sans problème. J'en ai deux dans un état `null`, c'est-à-dire qu'ils dorment, et aucun n'est arrêté à cause d'une erreur.

C'est tout l'intérêt : un seul écran, et vous savez quel container demande votre attention.

## Le script qui la produit {#the-script-that-produces-it}

Créez quelque part sur votre disque, dans une console Linux, un script appelé par exemple `health.sh` avec ce contenu :

**health.sh**

```bash
#!/usr/bin/env bash
# Intentionally no "errexit": one container's failed inspect shouldn't stop the
# whole list from being checked.
set -o nounset -o pipefail

GRAY=30
GREEN=32
RED=31

clear

printf "\e[1;33m%s\e[0m\n\n" "Docker containers - Health check"

docker container list --all --format "{{.Names}}" | while read -r name; do
    healthcheckStatus=$(docker inspect --format='{{json .State.Health}}' "$name" | jq -r '.Status')

    # Default color
    COLOR=${GRAY}

    if [[ "$healthcheckStatus" == "healthy" ]]; then
        COLOR=${GREEN}
    elif [[ ! "$healthcheckStatus" == "null" ]]; then
        COLOR=${RED}
    fi

    printf "%-40s\e[1;${COLOR}m%s\e[0m\n" "$name" "$healthcheckStatus"
done
```

Pensez à rendre le script exécutable : `chmod +x health.sh`, puis lancez-le avec `./health.sh`.

> **Obtenir la liste de tous les containers:**
>
> `docker container list --all --format "{{.Names}}"` retourne la liste de tous les containers et n'affiche que la colonne `Name` dans la console.

## Conclusion {#conclusion}

Quelques lignes de Bash, et la question *« est-ce que tout va toujours bien sur cette machine ? »* obtient une réponse en un coup d'œil, au lieu d'un `docker inspect` par container. N'hésitez pas à ajuster le script selon vos besoins.

Ce script vous donne un instantané, à la demande. Si vous préférez être **notifié** quand un service tombe, jetez un œil à [Self-hosted monitoring tool](/blog/docker_uptime_kuma). Et quand un container tourne mais reste injoignable depuis un autre, [Troubleshooting for Docker containers - Accessing the other one](/blog/docker-networking-troubleshooting) déroule le diagnostic, couche par couche.
