Mysql
 sql >> Base de données >  >> RDS >> Mysql

Spring Boot + docker-compose + MySQL :Connexion refusée

Docker compose démarre et arrête toujours les conteneurs dans l'ordre des dépendances, ou dans l'ordre séquentiel dans le fichier s'il n'est pas indiqué. Mais docker-compose ne garantit pas qu'il attendra que le conteneur de dépendances soit en cours d'exécution. Vous pouvez référer ici pour plus de détails. Donc, le problème ici est que votre base de données n'est pas prête lorsque votre spring-mysql conteneur essaie d'accéder à la base de données. Donc, la solution recommandée est que vous pouvez utiliser attends-ça.sh ou un script similaire pour envelopper votre spring-mysql application commençant par ENTRYPOINT .

Par exemple, si vous utilisez wait-for-it.sh votre ENTRYPOINT dans votre Dockerfile devrait changer comme suit après avoir copié le script ci-dessus à la racine de votre projet :

ENTRYPOINT ["./wait-for-it.sh", "db:3306", "--", "java", "-jar", "app.jar"]

Et deux autres choses importantes à considérer ici sont :

  • N'utilisez pas de liens, ils sont obsolètes vous devez utiliser le réseau défini par l'utilisateur à la place. Tous les services du fichier docker-compose seront dans un seul réseau défini par l'utilisateur si vous ne définissez pas explicitement de réseau. Il vous suffit donc de supprimer les liens du fichier de composition.
  • Vous n'avez pas besoin de publier le port pour le conteneur Docker si vous ne l'utilisez qu'à l'intérieur du réseau défini par l'utilisateur.