Die Springboot-Anwendung kann keine Verbindung mit der SQL-Datenbank herstellen, die auf Docker ausgeführt wird
P粉156532706
P粉156532706 2023-08-29 09:43:41
0
1
672
<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>
P粉156532706
P粉156532706

Antworte allen(1)
P粉510127741

在 docker compose 文件中为您的数据库服务指定一个容器名称

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

然后在您的 jdbc url 中,您应该引用配置的数据库容器名称和数据库容器的实际配置端口。

所以你的 datasource.url 看起来像

spring.datasource.url=jdbc:mysql://db-container:3306/mydb
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage