在Docker容器中无法启动我的Eureka Spring REST服务

我的项目由在Eureka注册的REST服务组成,我也使用Zuul代理来pipe理请求,如图所示。 它以本地方式在我的电脑上完美运行,但是当我为我的服务创build一个docker容器时,它不会启动。 我遵循的步骤是:

  • 我为每个服务创build了一个Docker容器:Eureka服务器,Zuul API网关,REST服务和我的Mysql数据库。
  • 我从数据库中的存储过程中获取我的服务的数据,这个连接被testing并且工作。
  • 我使用docker-compose启动所有实例,尤里卡和数据库实例保持运行,但REST服务实例突然停止。 祖鲁还没有实施。

错误:

matriculas-ms_1 | org.springframework.context.ApplicationContextException: Failed to start bean 'org.springframework.cloud.netflix.eureka.EurekaDiscoveryClientConfiguration'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.eurekaClient' defined in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration$RefreshableEurekaClientConfiguration.class]: Bean instantiation via factory method failed; nested exception is org.springframework.beans.BeanInstantiationException: Failed to instantiate [com.netflix.discovery.EurekaClient]: Factory method 'eurekaClient' threw exception; nested exception is java.lang.RuntimeException: Failed to initialize DiscoveryClient! 

这是docker-compose.yml

 version: '3.3' services: srclbd: build: ./srclbd ports: - "3307:3306" expose: - "3306" volumes: - ./srclbd/data:/var/lib/mysql eureka: build: ./Eureka ports: - "8761:8761" expose: - "8761" matriculas-ms: build: ./matriculas-ms ports: - "3333:3333" expose: - "3333" depends_on: - srclbd - eureka links: - srclbd - eureka environment: - DATABASE_HOST=srclbd - EUREKA_HOST=eureka 

尤里卡的Dockerfile:

 FROM java:8 ADD /target/eureka-0.0.1-SNAPSHOT.jar eureka-0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","eureka-0.0.1-SNAPSHOT.jar"] 

REST服务Dockerfile:

 FROM java:8 ADD /target/matriculas-service-0.0.1-SNAPSHOT.jar matriculas-service- 0.0.1-SNAPSHOT.jar ENTRYPOINT ["java","-jar","matriculas-service-0.0.1-SNAPSHOT.jar","-Xdebug -Xrunjdwp:server=y,transport=dt_socket,suspend=n"] 

这是我在github上的项目

这是我的错误?

最后我解决了我的错误设置一个单独的configuration文件到Docker容器是这样的:

 spring: profiles: container application: name: matriculas-ms jpa: hibernate: ddl-auto: none datasource: url: jdbc:mysql://srclbd:3306/srcl?useSSL=false&noAccessToProcedureBodies=true username: root password: root initialize: true eureka: client: serviceUrl: defaultZone: http://eureka:8761/eureka/ server: port: 1111 

然后,我在为我的REST服务创build的Dockerfile中build立了这个configuration文件。 所以,每次执行JAR文件时,都会使用创build的configuration文件的configuration。

 FROM java:8 ADD /target/svcMatriculas.jar svcMatriculas.jar ENTRYPOINT ["java","-Dspring.profiles.active=container","-jar","svcMatriculas.jar"] 

谢谢!