搜尋

首頁  >  問答  >  主體

springboot應用程式無法與docker上運行的sql資料庫建立連接

<p>我有一個在 localhost 中運行的項目,使用 intellij 作為 Springboot 實例、使用 Xampp 的 SQL 沒有任何問題。這工作得很好。但現在我想將所有內容部署到 docker 上。所以我在我的目錄中建立了一個 dockerfile 和一個 docker-compose up 文件,如下所示:</p> <pre class="brush:php;toolbar:false;">-Application | -Frontend (not in docker implemented yet) -Backend (springAPI) | -dockerfile -Python (flaskAPI) (not in docker implemented yet) docker-compose.yml</pre> <p>docker-compose.yml 如下圖所示:</p> <pre class="brush:php;toolbar:false;">version: '3.9' services: db: image: mysql:latest restart: always environment: MYSQL_ROOT_PASSWORD: <pass> MYSQL_DATABASE: mydb MYSQL_USER: <user> MYSQL_PASSWORD: <pass> ports: - "3306:3306" volumes: - ./data:/var/lib/mysql phpmyadmin: image: phpmyadmin/phpmyadmin:latest restart: always depends_on: - db ports: - "8888:80" environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: example spring-api: image: spring-api:latest ports: - "8080:8080" depends_on: - db volumes: dbdata: mysql-data:</pre> <p>springapi 的 dockerfile 如下圖所示:</p> <pre class="brush:php;toolbar:false;"># Use an official OpenJDK runtime as a parent image FROM openjdk:17-jdk-slim # Set the working directory to /app WORKDIR /app # Copy the application jar file to the container COPY build/libs/backendAPI.jar backendAPI.jar # Run the application CMD ["java", "-jar", "backendAPI.jar"]</pre> <p>這可以由 docker 組成並運行容器。 java spring boot 如何拋出錯誤並關閉。錯誤是:</p> <pre class="brush:php;toolbar:false;">`2023-03-06T12:25:37.603Z INFO 1 --- [ main] com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting. .. 2023-03-06T12:25:38.685Z ERROR 1 --- [ main] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization. com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.`</pre> <p>我嘗試像這樣重新設定我的 application.settings :</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>但是沒有效果。因為它一直拋出相同的錯誤。可以透過給定的 url 存取 SQL 伺服器。所以運作良好(除了沒有管理員權限,但這是一個不同的問題。)</p> <p>當我只使用 Xammp 和 intellij 時,這個設定對 application.settings 進行了一些調整,效果很好。但現在我無法連接它。我在這裡缺少什麼? </p> <p><strong>編輯我迄今為止嘗試過的內容</strong></p> <pre class="brush:php;toolbar:false;">db: image: mysql:latest restart: always container_name: sql-db</pre> <p>然後更改 application.settings:</p> <pre class="brush:php;toolbar:false;">spring.datasource.url=jdbc:mysql://sql-db:8888/mydb (and also with sql-db:3306)</pre> ; <p>但這仍然給出相同的錯誤。 </p>
P粉156532706P粉156532706483 天前692

全部回覆(1)我來回復

  • P粉510127741

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

    在 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

    回覆
    0
  • 取消回覆