Maison  >  Questions et réponses  >  le corps du texte

L'application Springboot ne peut pas établir de connexion avec la base de données SQL exécutée sur Docker

<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>
P粉156532706P粉156532706438 Il y a quelques jours664

répondre à tous(1)je répondrai

  • P粉510127741

    P粉5101277412023-08-30 00:12:12

    Spécifiez un nom de conteneur pour votre service de base de données dans le fichier de composition Docker

    db:
        image: mysql:latest
        restart: always
        **container_name: db-container**

    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 à

    spring.datasource.url=jdbc:mysql://db-container:3306/mydb

    répondre
    0
  • Annulerrépondre