docker-compse.yml春季启动mysql配置

时间:2019-11-14 07:22:53

标签: mysql spring-boot docker docker-compose

我一直在尝试使用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天以上了。我非常感谢您的快速帮助。 谢谢

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上监听。

相关问题