![](/img/trans.png)
[英]Spring boot Eureka Server Client throws connection timeouts under docker
[英]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.