Un meilleur bilan de santé Docker pour MySQL
Publié le 06/02/2021 • Actualisé le 06/02/2021
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 -h 127.0.0.1 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