我一直在尝试使用MySQL为我的春季启动应用程序配置docker。但是,运行
后,我总是收到通信链接失败错误。docker作文
这是错误的快照
spring-batch_1 | 2019-11-14 06:23:43.713 INFO 1 --- [ main]
com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Starting...
spring-batch_1 | 2019-11-14 06:23:43.918 ERROR 1 --- [ main]
com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool
initialization.
spring-batch_1 |
spring-batch_1 | com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link
failure
spring-batch_1 |
spring-batch_1 | The last packet sent successfully to the server was 0 milliseconds ago. The
driver has not received any packets from the server.
spring-batch_1 | at
com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[ .
mysql-connector-java-8.0.18.jar!/:8.0.18]
spring-batch_1 | at
com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException
(SQLExceptionsMapping.java:64 ) ~[mysql-connector-java-8.0.18.jar!/:8.0.18]
spring-batch_1 | at
com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-
8.0.18.jar!/:8.0.18]
spring-batch_1 | at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:456) ~
[mysql-connector-java-8.0.18.jar!/:8.0.18]
spring-batch_1 | at
com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:246) ~[mysql-connector-java-
8.0.18.jar!/:8.0.18]
spring-batch_1 | at
com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:199) ~[mysql-
connector-java-8.0.18.jar!/:8.0.18]
spring-batch_1 | at
com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-
3.4.1.jar!/:na]
spring-batch_1 | at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:353) ~
[HikariCP-3.4.1.jar!/:na]
spring-batch_1 | at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:201) ~
[HikariCP-3.4.1.jar!/:na]
spring-batch_1 | at
com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:473) ~[HikariCP-
3.4.1.jar!/:na]
spring-batch_1 | at
com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:562) ~[HikariCP-
3.4.1.jar!/:na]
spring-batch_1 | at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) ~ .
[HikariCP-3.4.1.jar!/:na]
spring-batch_1 | at
com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) ~[HikariCP-
3.4.1.jar!/:na]
spring-batch_1 | at
com.zaxxer.hikari.HikariDataSource$$FastClassBySpringCGLIB$$eeb1ae86.invoke(<generated>) ~ .
[HikariCP-3.4.1.jar!/:na]
spring-batch_1 | at
org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218) ~[spring-core-
5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
spring-batch_1 | at
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint
(CglibAopProxy.java:769) ~[spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
spring-batch_1 | at
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed
(ReflectiveMethodInvocation.java:163) ~[spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
spring-batch_1 | at
org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed
(CglibAopProxy.java:747) ~[spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
spring-batch_1 | at
org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed
(DelegatingIntroductionInterceptor.java:136) ~[spring-aop-5.2.1.RELEASE.jar!/:5.2.1.RELEASE]
这是我的 docker-compose.yml 文件
version: "3.3"
services:
mysql:
restart: always
image: mysql:latest
ports:
- 6033:3306
expose:
- 6033
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=root@123
- MYSQL_DATABASE=micro_services
- MYSQL_USER=root
- MYSQL_PASSWORD=root@123
spring-batch:
restart: always
image: ioesandeep/product-service:0.0.1-SNAPSHOT
ports:
- "8082:8082"
environment:
SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:6033/micro_services
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root@123
SPRING_JPA_DATABASE: mysql
depends_on:
- mysql
volumes:
db_data: {}
这是我的dockerfile
,用于构建我的 spring-batch图片
FROM openjdk:11-jdk
VOLUME /tmp
ARG JAR_FILE
ADD ${JAR_FILE} product.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/product.jar"]
我正在使用 com.spotify 中的 dockerfile-maven-plugin 构建映像。 这是我的 application.properties 文件,用于进行弹簧启动和休眠
spring.application.name=product
server.port=8082
spring.jpa.hibernate.ddl-auto=create-drop
spring.datasource.url=jdbc:mysql://127.0.0.1:6033/micro_services
spring.datasource.username=root
spring.datasource.password=root@123
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.jpa.database=mysql
spring.batch.initialize-schema=always
spring.batch.job.enabled=false
Docker version 18.09.2, build 6247962
mysql Ver 8.0.18 for macos10.14 on x86_64 (MySQL Community Server - GPL)
图片
mysql latest c8ee894bd2bd 4 weeks ago
openjdk 11-jdk a7e47afa852b 3 weeks ago
我为docker-compose文件尝试了很多配置,但是每次遇到相同的错误时,都会尝试使用。我不确定配置中缺少什么。我已经尝试了2天以上了。我非常感谢您的快速帮助。 谢谢
答案 0 :(得分:0)
您将SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:6033/micro_services
作为本地主机(127.0.0.1):
spring-batch
就您的SPRING_DATASOURCE_URL: jdbc:mysql://mysql:6033/micro_services
容器而言,它本身不是主机,因此它将无法连接。
您将需要更改它以引用mysql容器,例如:
SOUNDEX()
答案 1 :(得分:0)
您应该通过环境变量将连接字符串设置为spring.datasource.url=jdbc:mysql://mysql:3306/micro_services
:
SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/micro_services
因此mysql
是您的主机,它是您撰写中的服务名称。默认情况下,compose将所有服务连接到公用网络,服务名称将DNS名称解析为容器IP。
请注意,端口应为3306
,因为这些容器将通过此公用网络进行通信。 6033
是您向主机公开的端口,因此可以从主机通过mysql
访问localhost:6033
服务。
此外,您还可以摆脱mysql
服务定义中的expose
部分,因为这仅是出于文档目的,即使您想使用它,它也应该是这样:
expose:
- 3306
因为您的mysql
服务将在端口3306
上监听。