我尝试使用spring boot和MySQL制作一些rest API。我在我的eclipse环境中完成了它。下一步是创建docker映像。然而,当我在docker中运行MySQL服务器和RESTAPI时,它会给我一个连接拒绝错误。
我找到了其他基本的spring-boot和MySQL教程。但我无法解决这个问题。
这是 spring-boot 项目的 mysql 设置。
spring.datasource.url = jdbc:mysql://127.0.0.1:3306/users?allowPublicKeyRetrieval=true&useSSL=false&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC
spring.datasource.username = root
spring.datasource.password = root
#spring.ldap.embedded.base-dn=dc=example,dc=org
#spring.ldap.base=dc=example,dc=org
#spring.ldap.password=admin
#spring.ldap.username=cn=admin,dc=example,dc=org
#spring.ldap.urls=ldap://localhost:389
##Hibernate Properties
# The SQL dialect makes Hibernate generate better SQL for the chosen database
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5InnoDBDialect
#Open session in View
#spring.jpa.open-in-view=true
# Hibernate ddl auto (create, create-drop, validate, update)
spring.jpa.hibernate.ddl-auto=update
spring.jpa.generate.ddl-auto=update
这是在docker中运行mysql的命令。
docker urn -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root --name mysql mysql
这是我的docker文件,为rest API制作docker映像。
FROM java:8
VOLUME /tmp
EXPOSE 8080
ADD target/userManageWithRest-0.0.1-SNAPSHOT.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这是错误消息。
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_111]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[na:1.8.0_111]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.8.0_111]
at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[na:1.8.0_111]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:61) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:105) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.exceptions.ExceptionFactory.createException(ExceptionFactory.java:151) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.exceptions.ExceptionFactory.createCommunicationsException(ExceptionFactory.java:167) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:91) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.NativeSession.connect(NativeSession.java:152) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:955) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:825) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
... 56 common frames omitted
Caused by: java.net.ConnectException: Connection refused (Connection refused)
at java.net.PlainSocketImpl.socketConnect(Native Method) ~[na:1.8.0_111]
at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:350) ~[na:1.8.0_111]
at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:206) ~[na:1.8.0_111]
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:188) ~[na:1.8.0_111]
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392) ~[na:1.8.0_111]
at java.net.Socket.connect(Socket.java:589) ~[na:1.8.0_111]
at com.mysql.cj.protocol.StandardSocketFactory.connect(StandardSocketFactory.java:155) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
at com.mysql.cj.protocol.a.NativeSocketConnection.connect(NativeSocketConnection.java:65) ~[mysql-connector-java-8.0.15.jar!/:8.0.15]
... 59 common frames omitted
我已经尝试修改<code>spring.datasource。url到html" target="_blank">jdbc:mysql://mysql:3306/users?...
。我如何解决这个问题?请帮帮我。
尽管这个问题有点老了,但我相信这个解释可能是有用的。
您的问题的原因是您可以使用< code>depends_on选项控制服务启动和关闭的顺序。Compose总是按照依赖关系顺序启动和停止容器,其中依赖关系由depends_on,links决定...
然而,对于启动来说,Compose不会等到容器“就绪”(无论对您的特定应用程序意味着什么)之后,而只是等到它运行时。
这可能会导致一些问题,例如,您的spring-boot应用程序启动速度非常快并尝试连接到MySQL,但即使MySQL容器已经启动 - MySQL内部尚未准备好接受连接。
有一些解决方法。如果您对它们感兴趣,则可能需要检查此问题。
由于MySQL数据库和Spring Boot应用程序在单独的Docker容器中运行,因此Docker集装箱中的access<code>localhost。
我建议使用< code>docker-compose将Spring Boot应用程序链接到您的MySQL容器,并通过< code>mysql作为您已经尝试过的主机名来访问它(< code > JDBC:MySQL://MySQL:3306/users?...):
version: "3"
services:
backend:
build: .
depends_on:
- "mysql"
links:
- mysql
ports:
- "8080:8080"
mysql:
image: mysql:latest
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: root
将其保存在Spring BootDockerfile
位于docker-compose.yml
和运行docker-compose build的文件夹中
使用<code>links</code>属性,通过容器名称访问MySQL容器,并且由于它们共享同一Docker网络,因此<code>MySQL</code>主机名解析正确
我正在尝试运行一个Spring Boot应用程序,其中db必须连接到Docker上的MySQL容器。我使用了以下代码和命令。 应用程序属性: 用于创建容器的命令 从Docker Hub提取mysql映像: 创建容器: 在此命令之后,将创建一个容器,即使它已启动并正常工作。我能够登录到sql bash并执行一些查询。 我尝试使用多个jdbc网址: < Li > JDBC:MySQL://mysqld
问题内容: 我已经用docker compose设置了elasticsearch和kibana。elasticsearch 部署在:kibana部署在 当尝试通过docker run部署metricbeat时,出现以下错误: 我的docker-compose.yml: 问题答案: 首先通过添加默认码头工人网络的名称来编辑文件: 执行,然后从以下命令开始: 说明: 当您尝试进行部署时,您需要提供以下
我正在尝试按照一个简单的示例应用程序教程来创建一个Spring启动应用程序并将其连接到mysql数据库。使用智能诊断。https://www.youtube.com/watch?v=YVl6M5ztOu8 项目结构: 当我尝试运行此示例应用程序时,我收到以下错误消息: **运行该程序的步骤: 在称为“restfulapi”的 mysql 工作台中创建连接 参数是本地主机端口 3306 的 root
这是我的: 和Dockerfile goparser: 连接MongoDB需要使用哪个地址?
我使用Spring教程创建了一个单页应用程序,使用AngularJS和OAuth创建一个单页应用程序,可以在以下位置找到:https://Spring . io/guides/tutorials/Spring-security-and-angular-js/# _ multiple _ ui _ applications _ and _ a _ gateway _ Single _ Page _
我正在代理服务器后面开发一个Spring Boot应用程序。现在我需要连接到外部API,但我还没有弄清楚要配置什么才能使应用程序连接到外部API,我已经尝试用程序参数传递代理数据,并且已经尝试在Java控制面板中配置代理。如何让应用程序使用代理来访问API?