无法通过 Docker 创建与数据库服务器的连接
Posted
技术标签:
【中文标题】无法通过 Docker 创建与数据库服务器的连接【英文标题】:Could not create connection to database server via Docker 【发布时间】:2020-12-19 08:59:58 【问题描述】:我创建了一个简单的 Spring Boot 应用程序,以使用同一网络通过 docker 与 mysql 进行通信。一旦我运行docker-compose up
命令,就会发生以下错误
员工-jdbc-容器| java.sql.SQLNonTransientConnectionException: 无法创建与数据库服务器的连接。尝试重新连接 3 次。放弃。
员工-jdbc-容器|造成的: 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
我认为是配置文件的问题,但不知道哪里出了问题。
【问题讨论】:
请尝试使用其他工具连接到数据库,看看它是否正常工作。如果数据库正常工作,则问题可能在 application.yml 中。 您确定您的数据库已启动,何时建立连接?您是否尝试在短时间内重复docker-compose up
? (它应该在保持 DB 不活动的同时重新启动您的应用程序。)
您的错误提示,您需要更新启动选项 - ***.com/questions/50379839/…
@GiantsGits yes.DB 容器正在运行
@RatzzFatzz MYSQL 尚未安装在我的本地计算机上。如果有其他方法可以在不安装在本地机器上的情况下检查它
【参考方案1】:
最后,我找到了另一种方法来运行这两个容器而没有任何问题。
首先设置 MySQL 环境
docker pull 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环境
application.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 image build -t employee-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)
【讨论】:
以上是关于无法通过 Docker 创建与数据库服务器的连接的主要内容,如果未能解决你的问题,请参考以下文章
Docker:无法连接 Spring Boot 和 MYSQL