Docker-composer vérifier si la connexion mysql est prête
Je suis en train de faire en sorte que mon application conteneur ne pas exécuter les migrations /start jusqu'à ce que le db conteneur est démarré et PRÊT À accepter les connexions.
J'ai donc décidé d'utiliser le bilan de santé et dépend de l'option dans le panneau de composer fichier v2.
Dans l'application, j'ai le texte suivant
app:
...
depends_on:
db:
condition: service_healthy
La db sur l'autre main a la suite de la verification de la santé
db:
...
healthcheck:
test: TEST_GOES_HERE
timeout: 20s
retries: 10
J'ai essayé plusieurs approches :
- veillant à la db DIR est créé
test: ["CMD", "test -f var/lib/mysql/db"]
- Obtenir la version de mysql:
test: ["CMD", "echo 'SELECT version();'| mysql"]
- Ping à l'admin (marques de la db conteneur en bonne santé, mais ne semble pas être un test valide)
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
Quelqu'un a une solution à cela?
source d'informationauteur John Kariuki
Vous devez vous connecter pour publier un commentaire.
L'api conteneur ne démarre pas jusqu'à ce que le db conteneur est en bonne santé (en gros jusqu'à ce que la commande mysqladmin est en place et en acceptant des connexions).
Si vous pouvez modifier le conteneur à attendre pour mysql afin d'être prêt le faire.
Si vous n'avez pas le contrôle du conteneur que vous souhaitez vous connecter la base de données, vous pouvez essayer d'attendre le port spécifique.
Pour cela, j'utilise un petit script pour attendre un port spécifique exposée par un autre récipient.
Dans cet exemple, monserveur va attendre pour le port 3306 de mydb conteneur, afin d'être joignable.
Vous pouvez trouver le script wait-for-il de la documentation ici
J'ai modifié le menu fixe-composer.yml comme dans l'exemple suivant, et cela a fonctionné.
Dans mon cas
../schemaAndSeedData
contient plusieurs schéma et les données de semis de fichiers sql.Design your own check script
peut être semblable à la suivante 'select * from LastSchema.LastDBInsert'.Web dépendante container code a été