Java com.mysql.cj.jdbc.exceptions.CommunicationsException:尝试构建spring boot docker映像时通信链路失败

Java com.mysql.cj.jdbc.exceptions.CommunicationsException:尝试构建spring boot docker映像时通信链路失败,java,mysql,spring-boot,docker,spring-data-jpa,Java,Mysql,Spring Boot,Docker,Spring Data Jpa,我正在尝试为spring boot应用程序构建docker映像,但不断遇到以下错误: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | | || (_| | ) ) ) ) ' |____| .__|_| |_|_| |_\__, | / / / /

我正在尝试为spring boot应用程序构建docker映像,但不断遇到以下错误:

 .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::        (v2.2.5.RELEASE)

2020-05-31 02:18:39.820  INFO 63 --- [           main] c.g.Apollo.ApolloApplicationTests        : Starting ApolloApplicationTests on 4b284b60945e with PID 63 (started by root in /build)
2020-05-31 02:18:39.838  INFO 63 --- [           main] c.g.Apollo.ApolloApplicationTests        : No active profile set, falling back to default profiles: default
2020-05-31 02:18:42.208  INFO 63 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Bootstrapping Spring Data JPA repositories in DEFAULT mode.
2020-05-31 02:18:42.467  INFO 63 --- [           main] .s.d.r.c.RepositoryConfigurationDelegate : Finished Spring Data repository scanning in 216ms. Found 3 JPA repository interfaces.
2020-05-31 02:18:44.902  INFO 63 --- [           main] com.zaxxer.hikari.HikariDataSource       : HikariPool-1 - Starting...
2020-05-31 02:18:46.575 ERROR 63 --- [           main] com.zaxxer.hikari.pool.HikariPool        : HikariPool-1 - Exception during pool initialization.

com.mysql.cj.jdbc.exceptions.CommunicationsException: 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 com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:197) ~[mysql-connector-java-8.0.20.jar:8.0.20]
        at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:354) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:202) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:554) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~[HikariCP-3.4.2.jar:na]
        at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-3.4.2.jar:na]
我的Dockerfile:

FROM maven:3.6.3-jdk-11-slim AS MAVEN_BUILD

COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn package

FROM openjdk:11-jre-alpine

WORKDIR /app
COPY --from=MAVEN_BUILD /build/target/*.war /app/app.war
ENTRYPOINT ["java", "-jar", "app.war"]
My application.properties:

## GraphQL SPQR ##
server.port=8080
graphql.spqr.gui.enabled=true
graphql.spqr.http.endpoint=/graphql
graphql.spqr.ws.endpoint=/graphql

## Database Properties ##
spring.datasource.url=jdbc:mysql://localhost:3306/innodb
spring.datasource.username=root
spring.datasource.password=1234

当我在Intellij中构建和运行项目时,我的应用程序工作,但当我尝试构建我的docker映像时,我的应用程序不工作。我正在使用MySQL,刚刚在端口3306的本地主机上连接。

创建
jar
not
war

您不能使用命令-
java-jarapp.war
运行
war

将dockerfile更新为:

FROM maven:3.6.3-jdk-11-slim AS MAVEN_BUILD

COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn package

FROM openjdk:11-jre-alpine

WORKDIR /app
COPY --from=MAVEN_BUILD /build/target/*.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]
这应该能解决你的问题

如果这不起作用,那么首先检查mysql配置的
application.properties
application.yaml
文件。然后执行一个
mvn clean包
来创建一个新的jar

您还需要使用
Docker compose.yml
为MySQL配置Docker容器


请参阅此项。

错误消息似乎表明问题在于无法连接到数据库。根据您的设置,您似乎正在尝试使用localhost:3306连接到数据库。当您在容器中运行应用程序时,这将不起作用,因为docker创建了自己的网络,该网络独立于您的机器网络。因此,容器中的localhost不引用您的计算机。 您需要设置一个docker网络,允许您的容器访问特定IP地址中的数据库。 以下是一篇文章,其中有一些细节:
请注意,我在您的帖子中假设DB安装在您的主机中。如果不是,并且DB在其自己的容器中运行,则需要创建docker网络并将两个容器连接到该网络

更改为.jar并使用Intellij清理maven。我仍然得到同样的错误。我也发布了我的
应用程序.properties
。GraphQL是API的查询语言。是的,我真的在使用MySQL。不,我目前只是在使用Dockerfile。你说有一个MySQL容器是什么意思?我来看看。感谢您的帮助。始终使用安全egd和完整路径运行java,应用程序如下:
CMD[“java”、“-Djava.security.egd=file:/dev//uradom”、“-jar”、“/app/app.jar
FROM maven:3.6.3-jdk-11-slim AS MAVEN_BUILD

COPY pom.xml /build/
COPY src /build/src/
WORKDIR /build/
RUN mvn package

FROM openjdk:11-jre-alpine

WORKDIR /app
COPY --from=MAVEN_BUILD /build/target/*.jar /app/app.jar
ENTRYPOINT ["java", "-jar", "app.jar"]