【发布时间】:2020-04-25 12:53:58
【问题描述】:
我现在坐下来寻找解决方案超过 6 小时。请帮我。首先,我将尝试解释我的问题。我使用图像(在 dcoker 中)创建了 MySql 数据库,但是当我想创建另一个容器(Sprig Boot)并连接到数据库时,我不能。我尝试只创建 MySql 的图像并从 intellij 连接,一切都是正确的。只有当我尝试在容器中创建项目时才有问题......
我的文档编写
version: '3'
services:
api:
build: ./springboot-api-docker
ports:
- "9090:9090"
depends_on:
- database
database:
container_name: 'localhost'
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_PASSWORD: password
MYSQL_USER: user
MYSQL_DATABASE: animaldb
ports:
- "3307:3306"
restart: always
应用程序属性
server.port = 9090
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3307/animaldb?autoReconnect=true&useSSL=false
spring.datasource.username=user
spring.datasource.password=password
和DocerFile
FROM openjdk:8u201-jdk-alpine3.9
ADD target/springboot-api-docker-0.0.1-SNAPSHOT.jar .
EXPOSE 9090
CMD java -jar springboot-api-docker-0.0.1-SNAPSHOT.jar
这很有趣,因为...首先我想将容器“localhost”的名称更改为另一个。但是当我改变这一点时,即使从 intellij 也无法运行 Spring Bot Application。我在 docker 中创建了 MySql 的图像,并试图在 intellij 中连接。它正在闪烁,但是当我想在容器中使用 SpringBoot 应用程序时,问题就来了。我还没有找到适合我的解决方案。我将非常感谢您的每一次帮助。
我的错误在这里。
java.sql.SQLNonTransientConnectionException: 无法创建 连接到数据库服务器。尝试重新连接 3 次。放弃。
以及来自控制台的所有文本。也许你会发现它更快。
原因:org.hibernate.service.spi.ServiceException:无法 创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment] api_1 |在 org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:275) ~[hibernate-core-5.4.9.Final.jar!/:5.4.9.Final]
引起:com.mysql.cj.exceptions.CJCommunicationsException: 通讯链路故障 api_1 | api_1 |最后 成功发送到服务器的数据包是 0 毫秒前。这 驱动程序没有收到来自服务器的任何数据包。 api_1 |
在 sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native 方法)~[na:1.8.0_201] api_1 |在 sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_201] api_1 |在 sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_201] api_1 |在 java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_201] api_1 |在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.NativeSession.connect(NativeSession.java:144) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.jdbc.ConnectionImpl.connectWithRetries(ConnectionImpl.java:850) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | ... 58 常用框架省略 api_1 |造成的: java.net.ConnectException:连接被拒绝(连接被拒绝) api_1 |在 java.net.PlainSocketImpl.socketConnect(本机 方法)~[na:1.8.0_201] api_1 |在 java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_201] api_1 |在 java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_201] api_1 |在 java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_201] api_1 |在 java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_201] api_1 |在 java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_201] api_1 | 在 com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 |在 com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ~[mysql-connector-java-8.0.18.jar!/:8.0.18] api_1 | ... 60 常用框架省略
【问题讨论】:
-
你遇到了什么错误,你运行的是什么环境(mac/windows/linux)?
-
我再次编辑了帖子。我无法与 mysql 建立连接。我使用 Windows。
-
@Andrii 你找到解决问题的方法了吗?
标签: java mysql spring-boot docker docker-compose