簡體   English   中英

無法通過 Docker 創建與數據庫服務器的連接

[英]Could not create connection to database server via Docker

我創建了一個簡單的 Spring Boot 應用程序,通過 docker 使用相同的網絡與 MYSQL 進行通信。 一旦我運行docker-compose up命令,就會發生以下錯誤

員工-jdbc-容器| java.sql.SQLNonTransientConnectionException:無法創建到數據庫服務器的連接。 嘗試重新連接 3 次。 放棄。

員工-jdbc-容器| 引起:com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed

docker-compose.yml

version: "3"   
services:
  employee-mysql:
             image: employee-jdbc
             container_name: employee-jdbc-container
             ports:
             - "9090:9090"
             networks:
               - employee-mysql2    
             depends_on:
               - mysqldb
  mysqldb:
         image: mysql:8
         container_name: mysqldb
         ports:
         - "3306:3306"
         networks:
           - employee-mysql2
         environment:
           - MYSQL_USER=root
           - MYSQL_ROOT_PASSWORD=root
           - MYSQL_DATABASE=HR
networks:                     
    employee-mysql2: 

應用程序.yml

server:
  port: 9090

spring:
  datasource:
    url: "jdbc:mysql://mysqldb:3306/HR?createDatabaseIfNotExists=true&autoReconnect=true&useSSL=false"
    username: root
    password: root
    platform: mysql
    initialization-mode: always
    driver-class-name: com.mysql.cj.jdbc.Driver
  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect

我認為是配置文件中的問題,但不知道出了什么問題。

最后,我找到了另一種運行兩個容器的方法,沒有任何問題。

首先設置MySQL環境

碼頭工人拉mysql:8

然后將圖像作為容器運行

docker container run -d --name mysql-db -e MYSQL_ROOT_PASSWORD=<root_password> -e MYSQL_DATABASE=<database_name>
-e MYSQL_USER=<user> -e MYSQL_PASSWORD=<password>  mysql:8(image name with version)

第二套spring boot環境

應用程序.yml

server:
  port: 9090

spring:
  datasource:
    url: "jdbc:mysql://mysql-db/<database_name>?createDatabaseIfNotExists=true&autoReconnect=true&allowPublicKeyRetrieval=true&useSSL=false"
    username: <username>
    password: <password>
    initialization-mode: always
    driver-class-name: com.mysql.cj.jdbc.Driver
    tomcat:
      test-while-idle: true
      validation-query: SELECT 1
  jpa:
    database-platform: org.hibernate.dialect.MySQL8Dialect
    show-sql: true
    hibernate:
      ddl-auto: update
      

Docker 文件

FROM openjdk:11
COPY ./target/employee-mysql.jar employee-mysql.jar
EXPOSE <port number> (where your application is running)
ENTRYPOINT ["java","-jar","employee-mysql.jar"]

為 Spring Boot 應用程序構建一個 docker 鏡像

docker 鏡像構建 -t 員工-jdbc。

將employee-jdbc 鏡像作為容器運行

docker container run -d --name employee-mysql -p 9090:9090 --link mysql-db:mysql(mysql is the image of mysql-db container) employee-jdbc(employee-jdbc is the image of employee-mysql container)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM