我是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退出
答案 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_servicedocker-compose exec spring_boot_db_service bash
并进行到数据库容器的连接测试。