Un meilleur bilan de santé Docker pour MySQL

Publié le 06/02/2021 • Mis à jour le 06/02/2021


English language detected! 🇬🇧

  We noticed that your browser is using English. Do you want to read this post in this language?

Read the english version 🇬🇧 Close

Quand on utilise un conteneur pour MySQL, on démarre le service en appelant docker-compose up -d db. Si on lance une commande Symfony pour construire la base de données par exemple, on peut avoir l'erreur suivante :

An exception occurred in driver: SQLSTATE[HY000] [2006] MySQL server has gone away

Même si MySQL a démarré, il n'est pas encore prêt à recevoir ces commandes. C'est pourquoi il est essentiel d'avoir un bon contrôle de santé (health check). On peut utiliser docker inspect pour être sûr que le service est OK en lançant : docker inspect --format "{{json .State.Health.Status }}" sb-db. Si ça retourne "healthy" alors le service est prêt ; sinon, il faut encore attendre un peu. J'ai utilisé un simple script bash dans un précédent snippet qui boucle et attend que cette condition soit remplie. (en fait, je n'utilise pas docker inspect, mais je lance manuellement la même commande). N'utilisez pas mysqladmin ping car il peut donner des faux positifs !


    healthcheck:
      test: ["CMD-SHELL", "mysqladmin ping -P 3306 -proot | grep 'mysqld is alive' || exit 1"]
      interval: 10s
      timeout: 30s
      retries: 10

 Plus sur Stackoverflow   Lire la doc  Snippet aléatoire