无法通过Docker与数据库服务器建立连接。
无法通过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
我认为问题出在配置文件中,但不知道哪里出错了。
从上述内容可以整理出以下问题的出现原因和解决方法:
问题: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/
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