Die Springboot-Anwendung kann keine Verbindung mit der SQL-Datenbank herstellen, die auf Docker ausgeführt wird
P粉156532706
2023-08-29 09:43:41
<p>Ich habe ein Projekt, das in localhost läuft und Intellij als Springboot-Instanz verwendet, wobei ich Xampps SQL ohne Probleme verwende. Das funktioniert sehr gut. Aber jetzt möchte ich alles im Docker bereitstellen. Also habe ich in meinem Verzeichnis eine Docker-Datei und eine Docker-Compose-Up-Datei wie folgt erstellt: </p>
<pre class="brush:php;toolbar:false;">-Anwendung
|
-Frontend (noch nicht im Docker implementiert)
-Backend (springAPI)
|
-dockerfile
-Python (flaskAPI) (noch nicht in Docker implementiert)
docker-compose.yml</pre>
<p>docker-compose.yml sieht so aus: </p>
<pre class="brush:php;toolbar:false;">version: '3.9'
Dienstleistungen:
Datenbank:
Bild: mysql:latest
Neustart: immer
Umfeld:
MYSQL_ROOT_PASSWORD: <pass>
MYSQL_DATABASE: mydb
MYSQL_USER: <Benutzer>
MYSQL_PASSWORD: <pass>
Häfen:
- "3306:3306"
Bände:
- ./data:/var/lib/mysql
phpmyadmin:
Bild: phpmyadmin/phpmyadmin:latest
Neustart: immer
kommt drauf an:
-db
Häfen:
- „8888:80“
Umfeld:
PMA_HOST: db
MYSQL_ROOT_PASSWORD: Beispiel
Frühlings-API:
Bild: spring-api:latest
Häfen:
- „8080:8080“
kommt drauf an:
-db
Bände:
Datenbankdaten:
mysql-data:</pre>
<p>Die Docker-Datei von Springapi sieht folgendermaßen aus:</p>
<pre class="brush:php;toolbar:false;"># Verwenden Sie eine offizielle OpenJDK-Laufzeitumgebung als übergeordnetes Image
VON openjdk:17-jdk-slim
# Setzen Sie das Arbeitsverzeichnis auf /app
WORKDIR/app
# Kopieren Sie die JAR-Datei der Anwendung in den Container
KOPIEREN Sie build/libs/backendAPI.jar backendAPI.jar
# Führen Sie die Anwendung aus
CMD ["java", "-jar", "backendAPI.jar"]</pre>
<p>Dieser kann aus Docker- und Run-Containern bestehen. Wie löst Java Spring Boot einen Fehler aus und wird heruntergefahren?Der Fehler ist: </p>
<pre class="brush:php;toolbar:false;">`2023-03-06T12:25:37.603Z INFO 1 --- [main] com.zaxxer.hikari.HikariDataSource: HikariPool-1 – Wird gestartet. ..
2023-03-06T12:25:38.685Z FEHLER 1 --- [main] com.zaxxer.hikari.pool.HikariPool: HikariPool-1 – Ausnahme während der Poolinitialisierung.
com.mysql.cj.jdbc.Exceptions.CommunicationsException: Kommunikationsverbindungsfehler
Das letzte erfolgreich an den Server gesendete Paket liegt 0 Millisekunden zurück. Der Treiber hat keine Pakete vom Server empfangen.`</pre>
<p>Ich habe versucht, meine Anwendungseinstellungen wie folgt neu zu konfigurieren: </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>Aber es hat keine Auswirkung. Weil es immer wieder den gleichen Fehler auslöst. Über die angegebene URL kann auf den SQL-Server zugegriffen werden. Läuft also einwandfrei (außer dass ich keine Administratorrechte habe, aber das ist ein anderes Problem.) </p>
<p>Dieses Setup funktioniert mit einigen Änderungen an den application.settings hervorragend, wenn ich nur Xammp und Intellij verwende. Aber jetzt kann ich es nicht verbinden. Was fehlt mir hier? </p>
<p><strong>Bearbeiten Sie, was ich bisher versucht habe</strong></p>
<pre class="brush:php;toolbar:false;">db:
Bild: mysql:latest
Neustart: immer
Containername: sql-db</pre>
<p>Ändern Sie dann die application.settings: </p>
<pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (und auch mit sql-db:3306)</pre> ;
<p>Aber es kommt immer noch der gleiche Fehler. </p>
在 docker compose 文件中为您的数据库服务指定一个容器名称
然后在您的 jdbc url 中,您应该引用配置的数据库容器名称和数据库容器的实际配置端口。
所以你的 datasource.url 看起来像