无法通过Docker与数据库服务器建立连接。

18 浏览
0 Comments

无法通过Docker与数据库服务器建立连接。

我已经创建了一个简单的Spring Boot应用程序,通过使用相同的网络与MYSQL进行docker通信。一旦我运行docker-compose up命令,就会出现以下错误:

employee-jdbc-container | java.sql.SQLNonTransientConnectionException:

无法连接到数据库服务器。尝试重新连接3次。放弃。

employee-jdbc-container | 原因:

com.mysql.cj.exceptions.UnableToConnectException: 不允许检索公钥。

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: 

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

我认为问题出在配置文件中,但不知道哪里出错了。

0
0 Comments

从上述内容可以整理出以下问题的出现原因和解决方法:

问题:Could not create connection to database server via Docker

原因:数据库连接配置不正确

解决方法:

1. 首先设置MySQL环境,拉取MySQL 8版本的镜像:

   docker pull mysql:8
   

2. 运行MySQL镜像作为容器:

   docker container run -d --name mysql-db -e MYSQL_ROOT_PASSWORD= -e MYSQL_DATABASE= -e MYSQL_USER= -e MYSQL_PASSWORD= mysql:8
   

3. 设置Spring Boot环境,编辑application.yml文件,配置数据源连接信息:

server:

port: 9090

spring:

datasource:

url: "jdbc:mysql://mysql-db/?createDatabaseIfNotExists=true&autoReconnect=true&allowPublicKeyRetrieval=true&useSSL=false"

username:

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

4. 编写Dockerfile,构建Spring Boot应用的Docker镜像:

   FROM openjdk:11
   COPY ./target/employee-mysql.jar employee-mysql.jar
   EXPOSE  (应用运行的端口号)
   ENTRYPOINT ["java","-jar","employee-mysql.jar"]
   

5. 构建Spring Boot应用的Docker镜像:

   docker image build -t employee-jdbc .
   

6. 运行Spring Boot应用的容器,并将其与MySQL容器进行链接:

   docker container run -d --name employee-mysql -p 9090:9090 --link mysql-db:mysql employee-jdbc
   

0