在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"]
谢谢!
- Docker中的sha256是什么意思,图片层的目录在哪里?
- 在Docker中使用Appium自动化iOS应用程序
- traefik反向代理与docker后端 – 在traefik的configuration文件configuration前端规则,而不是通过容器标签
- Docker缓慢的非本地数据库访问
- Docker Windows 8的问题 – 重启后容器不加载
- 已发布的服务在Docker群集上无法访问
- Docker和Octopus Deploy有什么不同?
- 为什么“数据空间已用”+“数据空间可用”!=“数据空间总计”在docker?
- 如何使用“babel-watchdebugging”进行debugging?