2017-09-11 5 views
0

Mon projet consiste en un service REST, qui est enregistré dans Eureka. J'utilise également le proxy Zuul pour gérer les demandes comme indiqué dans this image. Il fonctionne parfaitement sur mon ordinateur de manière locale mais lorsque je crée un conteneur docker pour mon service, il ne démarre pas. Les étapes que j'ai suivies:Impossible de monter mon service Eureka Spring REST dans un conteneur Docker

  • J'ai créé un conteneur Docker pour chaque service: serveur Eureka, passerelle API Zuul, le service REST et ma base de données Mysql.
  • Je reçois les données de mon service à partir d'une procédure stockée dans la base de données, cette connexion a été testée et cela fonctionne.
  • Je démarre toutes les instances avec docker-composer, Eureka et les instances de base de données restent actives mais l'instance de service REST s'arrête brutalement. Zuul n'est pas encore implémenté.

L'erreur:

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! 

Voici le 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 de Eureka:

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"] 

service 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"] 

Voici mon projet sur github

Quelle est mon erreur?

+0

Pourquoi copiez-vous les fichiers jar? Vous devriez les construire dans votre dockerfile lui-même –

Répondre

0

Enfin, je résolu mon erreur mise en place d'un profil de configuration séparé pour conteneur Docker comme ceci:

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 

Ensuite, j'ai créé ce profil dans le Dockerfile créé pour mon service REST. Ainsi, chaque fois qu'il exécute le fichier JAR, il le fera avec la configuration du profil créé.

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

Merci!