简体   繁体   English

无法通过 Docker 创建与数据库服务器的连接

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

I have created a simple spring boot app to communicate with MYSQL via docker using the same network.我创建了一个简单的 Spring Boot 应用程序,通过 docker 使用相同的网络与 MYSQL 进行通信。 Once I run docker-compose up command then following errors have occurred一旦我运行docker-compose up命令,就会发生以下错误

employee-jdbc-container |员工-jdbc-容器| java.sql.SQLNonTransientConnectionException: Could not create connection to database server. java.sql.SQLNonTransientConnectionException:无法创建到数据库服务器的连接。 Attempted reconnect 3 times.尝试重新连接 3 次。 Giving up.放弃。

employee-jdbc-container |员工-jdbc-容器| Caused by: com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed引起:com.mysql.cj.exceptions.UnableToConnectException: Public Key Retrieval is not allowed

docker-compose.yml 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应用程序.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

I think the problem in the configuration file but have no idea what is wrong.我认为是配置文件中的问题,但不知道出了什么问题。

finally, I have found another way to run both containers without any issue.最后,我找到了另一种运行两个容器的方法,没有任何问题。

first set MySQL environment首先设置MySQL环境

docker pull mysql:8码头工人拉mysql:8

then run the image as a container然后将图像作为容器运行

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)

second set spring boot environment第二套spring boot环境

application.yml应用程序.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 file 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"]

build a docker image for spring boot app为 Spring Boot 应用程序构建一个 docker 镜像

docker image build -t employee-jdbc . docker 镜像构建 -t 员工-jdbc。

run the employee-jdbc image as a container将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.

相关问题 .MySQLNonTransientConnectionException: Could not create connection to database server - .MySQLNonTransientConnectionException: Could not create connection to database server 登录中的异常::无法创建与数据库服务器的连接 - Exception in Login:: Could not create connection to database server 无法创建与数据库服务器MySQL 8.0的连接 - Could not create connection to database server, MySQL 8.0 异常无法创建与数据库服务器的连接 - exception could not create connection to database server 无法创建到 MySQL 数据库服务器的 JDBC 连接 - Could not create JDBC connection to MySQL database server 无法建立与数据库服务器的连接-Java MySQL Connector - Could not create connection to database server - java mysql connector SQLException: 无法创建到数据库服务器的连接。 SQLState: 08001 - SQLException: Could not create connection to database server. SQLState: 08001 “无法创建与数据库服务器的连接” netbeans谷歌云sql错误 - “Could not create connection to database server” netbeans google cloud sql error 无法建立与数据库服务器的连接-Eclipse MySQL错误 - Could not create connection to database server - Eclipse MySQL error 调用Driver#connect时出错,并且无法创建与数据库服务器的连接 - Error calling Driver#connect and Could not create connection to database server
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM