L'application Springboot ne peut pas établir de connexion avec la base de données SQL exécutée sur Docker
P粉156532706
2023-08-29 09:43:41
<p>J'ai un projet en cours d'exécution dans localhost utilisant intellij comme instance Springboot, en utilisant le SQL de Xampp sans aucun problème. Cela fonctionne très bien. Mais maintenant, je veux tout déployer sur Docker. J'ai donc créé un fichier dockerfile et un fichier docker-compose up dans mon répertoire comme ceci : </p>
<pre class="brush:php;toolbar:false;">-Application
|
-Frontend (pas encore implémenté dans Docker)
-Backend (springAPI)
|
-fichier docker
-Python (flaskAPI) (pas encore implémenté dans Docker)
docker-compose.yml</pre>
<p>docker-compose.yml ressemble à ceci : </p>
<pre class="brush:php;toolbar:false;">version : '3.9'
prestations de service:
base de données :
image : mysql : dernière
redémarrer : toujours
environnement:
MYSQL_ROOT_PASSWORD : <pass>
MYSQL_DATABASE : ma base de données
MYSQL_USER : <utilisateur>
MYSQL_PASSWORD : <passe>
ports :
- "3306:3306"
tomes :
- ./data:/var/lib/mysql
phpmyadmin :
image : phpmyadmin/phpmyadmin:dernière
redémarrer : toujours
dépend de:
-db
ports :
- "8888:80"
environnement:
PMA_HOST : base de données
MYSQL_ROOT_PASSWORD : exemple
API de printemps :
image : spring-api : dernière
ports :
- "8080:8080"
dépend de:
-db
tomes :
données de base de données :
données mysql :</pre>
<p>Le fichier docker de springapi ressemble à ceci :</p>
<pre class="brush:php;toolbar:false;"># Utiliser un runtime OpenJDK officiel comme image parent
DE openjdk:17-jdk-slim
# Définissez le répertoire de travail sur /app
TRAVAIL/application
# Copiez le fichier jar de l'application dans le conteneur
COPIER build/libs/backendAPI.jar backendAPI.jar
# Exécutez l'application
CMD ["java", "-jar", "backendAPI.jar"]</pre>
<p>Ceci peut être composé de conteneurs Docker et Run. Comment Java Spring Boot génère-t-il une erreur et s'arrête-t-il.L'erreur est : </p>
<pre class="brush:php;toolbar:false;">`2023-03-06T12:25:37.603Z INFO 1 --- [main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Démarrage. ..
2023-03-06T12:25:38.685Z ERREUR 1 --- [main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception lors de l'initialisation du pool.
com.mysql.cj.jdbc.exceptions.CommunicationsException : échec du lien de communication
Le dernier paquet envoyé avec succès au serveur remonte à 0 milliseconde. Le pilote n'a reçu aucun paquet du serveur.`</pre>
<p>J'ai essayé de reconfigurer les paramètres de mon application comme ceci : </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://localhost:8888/mydb
spring.datasource.username=<theusername>
spring.datasource.password=<thepassword>
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver</pre>
<p>Mais cela n’a aucun effet. Parce qu'il continue de générer la même erreur. Le serveur SQL est accessible via l'URL indiquée. Donc, cela fonctionne bien (sauf ne pas avoir de droits d'administrateur, mais c'est un autre problème.) </p>
<p>Cette configuration, avec quelques modifications apportées à application.settings, fonctionne très bien lorsque j'utilise uniquement Xammp et intellij. Mais maintenant, je ne peux pas le connecter. Qu'est-ce que j'oublie ici? </p>
<p><strong>Modifier ce que j'ai essayé jusqu'à présent</strong></p>
<pre class="brush:php;toolbar:false;">db :
image : mysql : dernière
redémarrer : toujours
nom_conteneur : sql-db</pre>
<p>Puis modifiez les paramètres d'application : </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (et aussi avec sql-db:3306)</pre> ;
<p>Mais cela donne toujours la même erreur. </p>
Spécifiez un nom de conteneur pour votre service de base de données dans le fichier de composition Docker
Ensuite, dans votre URL jdbc, vous devez référencer le nom du conteneur de base de données configuré et le port réellement configuré du conteneur de base de données.
Votre datasource.url ressemble donc à