繁体   English   中英

使用 spring 引导在 Docker 中运行 Eureka Server 和 Eureka Client

[英]Running Eureka Server and Eureka Client in Docker using spring boot

希望你做得很好,我面临一个问题并尝试解决很多天但失败了。 我有两个spring启动微服务,一个叫客户端,一个叫服务端。 当我 dockerize 微服务并运行服务器时,它运行正常,但是当我尝试运行客户端时,它给了我一个错误。 错误就像。

2021-12-27 11:01:45.646  WARN 1 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator     : There was a problem with the instance info replicator


com.netflix.discovery.shared.transport.TransportException: Cannot execute request on any known server

at com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:59) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:876) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) ~[eureka-client-1.10.17.jar!/:1.10.17]

at com.netflix.discovery.InstanceInfoReplicator$1.run(InstanceInfoReplicator.java:101) ~[eureka-client-1.10.17.jar!/:1.10.17]

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515) ~[na:na]

at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:304) ~[na:na]

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1135) ~[na:na]

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]

at java.base/java.lang.Thread.run(Thread.java:831) ~[na:na]

服务器 application.yml 文件是;

server.port: 8761

eureka:
  instance:
    hostname: eurekaserver
  client:
    registerWithEureka: false
    fetchRegistry: false

spring:
  application:
    name: EUREKA-SERVER

而客户端 application.yml 文件就像;

server:
  port: 8080


spring:
  application:
    name: EUREKA-CLIENT

eureka:
  instance:
    hostname: eurekaclient
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka

我尝试defaultZone: http://eurekaserver:8761/eureka 但得到了同样的错误。

Client的docker文件为:

FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} eurekaclient.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/eurekaclient.jar"]

提前致谢:)

请尝试以下操作:service-url 属性(在 YML 中可以别名为 serviceUrl)之后的 label 是 HashMap 密钥,而不是属性 label。 所以它必须以任何方式作为 Camel Case 标签保存!

eureka.client.service-url.defaultZone=http://[myIP@]:8787/eureka

您无法通过传递 localhost 来注册到 eureka 服务器。

你可以做什么,用容器名称代替 localhost 并创建一个网络,并在运行图像时指定网络。

请按照以下步骤操作。

假设您的 eureka 图像名称是 -> eureka-server

首先,使用以下命令创建一个网络:

docker 创建网络 springcloud-ms

运行 eureka 容器并指定网络,如下所示:

docker 运行 --name eureka-container -p 8761:8761 --network springcloud-ms eureka-server

更改尤里卡客户端的application.yml如下:

服务器:端口:8080 spring:应用程序:名称:EUREKA-CLIENT eureka:实例:主机名:eurekaclient 客户端:serviceUrl:defaultZone:http://eureka-container:8761/eureka

然后运行客户端映像。 假设您的客户端图像名称是 client-service 然后使用以下命令:

docker 运行 --name 客户端容器 -p 8080:8080 --network springcloud-ms 客户端服务

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM