我是一个新手,正在学习Docker。我正在使用Spring Boot微服务,在我的本地机器上运行良好。现在,我需要为我的应用程序创建一个容器镜像。它依赖于Mysql服务器。我正在使用docker-compose来创建我的容器。在运行我的自定义镜像(Spring Boot应用程序)时,出现了通信链接失败的错误。但是,Mysql镜像可以独立运行。
我的yml文件:
Original Answer: "最初的回答"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 INFO 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: Hibernate Commons Annotations {5.0.1.Final} spring_boot_db_service_1 | 2019-01-28 13:34:08.430 WARN 1 --- [main] o.h.e.j.e.i.JdbcEnvironmentInitiator : HHH000342: 无法获取连接以查询元数据:通信链路失败 spring_boot_db_service_1 | 最后一次成功发送到服务器的数据包是 0 毫秒前。驱动程序没有从服务器接收到任何数据包。 spring_boot_db_service_1 | 2019-01-28 13:34:08.443 INFO 1 --- [main] org.hibernate.dialect.Dialect : HHH000400: 使用方言:org.hibernate.dialect.MySQL5Dialect spring_boot_db_service_1 | 2019-01-28 13:34:08.459 INFO 1 --- [main] o.h.e.j.e.i.LobCreatorBuilderImpl : HHH000422: 禁用上下文 LOB 创建,因为连接为空 spring_boot_db_service_1 | 2019-01-28 13:34:08.921 WARN 1 --- [main] ConfigServletWebServerApplicationContext : 在上下文初始化期间遇到异常 - 取消刷新尝试:org.springframework.beans.factory.UnsatisfiedDependencyException: 通过字段 'dbServiceDao' 表达的未满足的依赖关系创建 bean 时出错;嵌套异常是 org.springframework.beans.factory.UnsatisfiedDependencyException: 通过字段 'sessionFactory' 表达的未满足的依赖关系创建 bean 时出错;嵌套异常是 org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [com/htc/dbservice/configuration/DBConfiguration.class]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Could not get constructor for org.hibernate.persister.entity.SingleTableEntityPersister spring_boot_db_service_1 | 2019-01-28 13:34:08.923 WARN 1 --- [main] o.s.b.f.support.DisposableBeanAdapter : 在名为 'eurekaRegistration' 的 bean 上调用销毁方法 'close' 失败:org.springframework.beans.factory.BeanCreationNotAllowedException: 创建名为 'org.springframework.cloud.netflix.eureka.EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration' 的 bean 时不允许使用单例,因为此工厂的单例正在销毁中(在销毁方法实现中不要从 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
links
不能确保MySQL已经启动并准备好连接。 - Yann39