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
509

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:

-Anwendung | -Frontend (noch nicht im Docker implementiert) -Backend (springAPI) | -dockerfile -Python (flaskAPI) (noch nicht in Docker implementiert) docker-compose.yml

docker-compose.yml sieht so aus:

version: '3.9' Dienstleistungen: Datenbank: Bild: mysql:latest Neustart: immer Umfeld: MYSQL_ROOT_PASSWORD:  MYSQL_DATABASE: mydb MYSQL_USER:  MYSQL_PASSWORD:  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:

Die Docker-Datei von Springapi sieht folgendermaßen aus:

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

Dieser kann aus Docker- und Run-Containern bestehen. Wie löst Java Spring Boot einen Fehler aus und wird heruntergefahren?Der Fehler ist:

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

Ich habe versucht, meine Anwendungseinstellungen wie folgt neu zu konfigurieren:

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

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

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?

Bearbeiten Sie, was ich bisher versucht habe

db: Bild: mysql:latest Neustart: immer Containername: sql-db

Ändern Sie dann die application.settings:

spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (und auch mit sql-db:3306)
;

Aber es kommt immer noch der gleiche Fehler.

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
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage
    Über uns Haftungsausschluss Sitemap
    Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!