无法将mysql docker容器与spring boot应用程序链接-通信链接失败

时间:2019-01-28 13:46:49

标签: mysql spring-boot docker-compose

我是Docker的新手。我正在使用Spring Boot Micro服务。在我的本地计算机上运行良好。现在,我需要为我的应用程序创建一个docker映像。它对Mysql服务器有依赖性。我正在使用docker-compose创建我的容器。运行自定义映像(Spring Boot应用程序)时出现通信链接失败错误。 Mysql映像独立运行良好。

我的yml文件:

version: '2'

services:

  mysql-dev:
    image: mysql:5.7
    container_name: mysql-dev
    environment:
      MYSQL_ROOT_PASSWORD: "password"
      MYSQL_DATABASE: "onlinetutorialspoint"
    networks:
      - my_mysql_net
    ports:
      - 3306:3308

  spring_boot_db_service:
    depends_on:
      - mysql-dev
    image: spring_boot_db_service
    ports:
      - 8181:8181
    links:
      - mysql-dev:mysql
    networks:
      - my_mysql_net

networks:
  my_mysql_net:
    driver: bridge 

应用程序属性文件:

db.driver: com.mysql.jdbc.Driver

spring.datasource.url = jdbc:mysql://mysql-dev:3308/onlinetutorialspoint?useSSL=false

spring.datasource.username = root

spring.datasource.password = password

完整错误消息:

  

spring_boot_db_service_1 | 2019-01-28 13:34:06.955信息1 --- [
  main] org.hibernate.cfg.Environment:HHH000206:   找不到hibernate.properties spring_boot_db_service_1 | 2019-01-28   13:34:07.000 INFO 1 --- [main]   o.hibernate.annotations.common.Version:HCANN000001:休眠   公用注释{5.0.1.Final} spring_boot_db_service_1 |   2019-01-28 13:34:08.430警告1 --- [ main]   o.h.e.j.e.i.JdbcEnvironmentInitiator:HHH000342:无法获取   与查询元数据的连接:通信链接失败   spring_boot_db_service_1 | spring_boot_db_service_1 |最后   数据包成功发送到服务器是在0毫秒前。的   驱动程序尚未收到来自服务器的任何数据包。   spring_boot_db_service_1 | 2019-01-28 13:34:08.443信息1 --- [
  主要] org.hibernate.dialect.Dialect:HHH000400:使用   的方言:org.hibernate.dialect.MySQL5Dialect spring_boot_db_service_1   | 2019-01-28 13:34:08.459信息1 --- [主要]   o.h.e.j.e.i.LobCreatorBuilderImpl:HHH000422:禁用   由于连接为空,因此创建上下文LOB   spring_boot_db_service_1 | 2019-01-28 13:34:08.921警告1 --- [
  [主要] ConfigServletWebServerApplicationContext:遇到异常   在上下文初始化期间-取消刷新尝试:   org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名称为“ dbServiceImpl”的bean时出错:不满意的依赖关系   通过字段“ dbServiceDao”表示;嵌套异常为   org.springframework.beans.factory.UnsatisfiedDependencyException:   创建名称为'dbServiceDaoImpl'的bean时出错:通过字段'sessionFactory'表示的不满意的依赖关系;嵌套异常   是org.springframework.beans.factory.BeanCreationException:错误   创建在类路径中定义的名称为'sessionFactory'的bean   资源[com / htc / dbservice / configuration / DBConfiguration.class]:   调用init方法失败;嵌套异常为   org.hibernate.MappingException:无法获取构造函数   org.hibernate.persister.entity.SingleTableEntityPersister   spring_boot_db_service_1 | 2019-01-28 13:34:08.923警告1 --- [
  主要] o.s.b.f.support.DisposableBeanAdapter:销毁的调用   方法“关闭”在名称为“ eurekaRegistration”的bean上失败:   org.springframework.beans.factory.BeanCreationNotAllowedException:   创建名称为bean的错误   'org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration $ RefreshableEurekaClientConfiguration':   在此工厂的单例中不允许创建单例bean   处于破坏中(请勿向BeanFactory中的BeanFactory请求Bean   销毁方法的实现!)spring_boot_db_service_1 | 2019-01-28   13:34:08.926 INFO 1 --- [main]   o.apache.catalina.core.StandardService:正在停止服务[Tomcat]   docker_spring_boot_db_service_1以代码1退出

1 个答案:

答案 0 :(得分:1)

您是否更改了默认的mysql端口?如果不是,则您指向错误的端口号。 当您映射端口以在外部发布服务时,顺序为

<host-port>:<container-port>
services:   
   mysql-dev:  
     image: mysql:5.7  
     container_name: mysql-dev  
     environment:  
       MYSQL_ROOT_PASSWORD: "password"  
       MYSQL_DATABASE: "onlinetutorialspoint"  
     networks:  
       - my_mysql_net  
     ports:  
       - 3308:3306  

并使用docker-compose并将这两个服务连接到同一网络,您可以直接连接到容器,而无需将mysql端口发布到外部网络。 尝试更改指向mysql-dev:3306的spring应用,或尝试使用

连接到容器 spring_boot_db_service
docker-compose exec spring_boot_db_service bash  

并进行到数据库容器的连接测试。