L'application Springboot ne peut pas établir de connexion avec la base de données SQL exécutée sur Docker
P粉156532706
P粉156532706 2023-08-29 09:43:41
0
1
537

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 :

-Application | -Frontend (pas encore implémenté dans Docker) -Backend (springAPI) | -fichier docker -Python (flaskAPI) (pas encore implémenté dans Docker) docker-compose.yml

docker-compose.yml ressemble à ceci :

version : '3.9' prestations de service: base de données : image : mysql : dernière redémarrer : toujours environnement: MYSQL_ROOT_PASSWORD :  MYSQL_DATABASE : ma base de données MYSQL_USER :  MYSQL_PASSWORD :  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 :

Le fichier docker de springapi ressemble à ceci :

# 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"]

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 :

`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.`

J'ai essayé de reconfigurer les paramètres de mon application comme ceci :

spring.datasource.url=jdbc:mysql://localhost:8888/mydb spring.datasource.username= spring.datasource.password= spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

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.)

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?

Modifier ce que j'ai essayé jusqu'à présent

db : image : mysql : dernière redémarrer : toujours nom_conteneur : sql-db

Puis modifiez les paramètres d'application :

spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (et aussi avec sql-db:3306)
;

Mais cela donne toujours la même erreur.

P粉156532706
P粉156532706

répondre à tous (1)
P粉510127741

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
    Derniers téléchargements
    Plus>
    effets Web
    Code source du site Web
    Matériel du site Web
    Modèle frontal
    À propos de nous Clause de non-responsabilité Sitemap
    Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!