首页 > 解决方案 > docker-compse.yml spring boot mysql 配置

问题描述

我一直在尝试使用 MySQL 为我的 spring boot 应用程序配置 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来构建图像。这是我用于 spring boot 和 hibernate的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 多天了。我非常感谢您的快速帮助。谢谢

标签: mysqlspring-bootdockerdocker-compose

解决方案


你有你SPRING_DATASOURCE_URL的本地主机(127.0.0.1):

SPRING_DATASOURCE_URL: jdbc:mysql://127.0.0.1:6033/micro_services

就您的spring-batch容器而言,它本身不是主机,因此它将无法连接。

您需要更改它以引用 mysql 容器,例如:

SPRING_DATASOURCE_URL: jdbc:mysql://mysql:6033/micro_services

推荐阅读