【发布时间】:2019-06-21 12:54:06
【问题描述】:
我是 Docker 新手。我正在使用 Spring Boot 微服务。它在我的本地机器上运行良好。现在,我需要为我的应用程序创建一个 docker 映像。它依赖于 Mysql 服务器。我正在使用 docker-compose 创建我的容器。运行自定义映像(弹簧启动应用程序)时出现通信链路故障错误。 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 --- [
主要] org.hibernate.cfg.Environment:HHH000206: hibernate.properties 未找到 spring_boot_db_service_1 | 2019-01-28 13:34:07.000 信息 1 --- [主要] 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.MySQL5方言 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 --- [
main] 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 --- [
main] o.s.b.f.support.DisposableBeanAdapter : 调用销毁 名称为“eurekaRegistration”的 bean 上的“关闭”方法失败: org.springframework.beans.factory.BeanCreationNotAllowedException: 创建具有名称的 bean 时出错 'org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration': 此工厂的单例时不允许创建单例 bean 处于销毁状态(不要从 BeanFactory 中请求 bean 销毁方法实现!) spring_boot_db_service_1 | 2019-01-28 13:34:08.926 信息 1 --- [主要] o.apache.catalina.core.StandardService :停止服务 [Tomcat] docker_spring_boot_db_service_1 以代码 1 退出
【问题讨论】:
-
欢迎来到 Stackoverflow 好友!请看一下如何格式化您的文本,这不容易阅读。
-
你能分享完整准确的错误信息吗?
-
@NicoHaase 感谢您的回复,我已在问题部分添加了堆栈跟踪。谢谢
-
您是否在首次创建容器后更改了密码?如果是,您不仅需要重新启动容器,还需要清理卷,因为 Compose 正在做一些额外的事情来保存运行之间的数据库状态。还要确保您的数据库在您的 Spring Boot 应用程序之前启动(您可能需要等待脚本),
links不确保 MySQL 已启动并准备好连接。 -
@Yann39 感谢您的回复。由于我使用的是版本 2,因此我在命令部分添加了 github.com/Eficode/wait-for sh 文件。我也在终端中验证了相同的内容。不过,我遇到了同样的问题。在 yml 文件中添加的命令:命令:sh -c './wait-for mysql-dev:3306 -- npm start'
标签: mysql spring-boot docker-compose