Vérifier si le service Elasticsearch d'un conteneur Docker est prêt

Publié le 08/09/2020 • Actualisé le 08/09/2020


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

C'est la troisième partie de la série "attendre-ce-service" (regarder les liens sous le code). Dans le dernier bout de code, nous avons vu comment attendre que le service MySQL soit prêt. Dans ce projet, après le chargement des données dans la base, je dois les indexer dans Elasticsearch. Donc vérifier MySQL uniquement n'est pas suffisant puisque l'initialisation d'Elasticsearch peut être plus longue que MySQL. Dans ce cas nous allons nous servir de l'API cluster. Nous avons un paramètre dédié wait_for_status qui permet de forcer le retour d'un code de succès seulement quand le cluster atteint un certain statut. C'est très pratique puisque que c'est précisément ce dont nous avons besoin pour notre script bash d'attente. Si Elasticsearch n'est pas disponible du tout, curl retourne un code d'erreur, et s'il est disponible, il ne retourne un code de succès que si le cluster à un statut vert ou jaune. Dans mon Makefile, j'appelle ce script juste après le chargement des fixtures, ça permet à Elasticsearch de continuer son initialisation pendant le chargement des données dans la base.


#!/bin/sh
# If called very early the curl will receive an "empty" response and a failing status
# As soon as Elasticsearch can process the command, it will return a success status
# as soon as the cluster is yellow or green
seconds=1
until curl 'localhost:9209/_cluster/health?wait_for_status=yellow&timeout=30s'; do
  >&2 echo "Elastisearch is unavailable - waiting for it... 😴 ($seconds)"
  sleep 1
  seconds=$(expr $seconds + 1)
done

 Plus sur Stackoverflow   Lire la doc  Plus sur le web  Snippet aléatoire

  Travaillez avec moi !