[英]Running Eureka Server and Eureka Client in Docker using spring boot
Hope you are doing good, I face a problem and try to solve it for many days but failed.希望你做得很好,我面临一个问题并尝试解决很多天但失败了。 I have two spring boot microservice, one is called the client and the second is called the server.
我有两个spring启动微服务,一个叫客户端,一个叫服务端。 When I dockerize the microservices and run the server, it runs properly but when I try to run the client, it gives me an error.
当我 dockerize 微服务并运行服务器时,它运行正常,但是当我尝试运行客户端时,它给了我一个错误。 the error is like.
错误就像。
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]
The Server application.yml file is;服务器 application.yml 文件是;
server.port: 8761
eureka:
instance:
hostname: eurekaserver
client:
registerWithEureka: false
fetchRegistry: false
spring:
application:
name: EUREKA-SERVER
While the client application.yml file is like;而客户端 application.yml 文件就像;
server:
port: 8080
spring:
application:
name: EUREKA-CLIENT
eureka:
instance:
hostname: eurekaclient
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka
I try defaultZone: http://eurekaserver:8761/eureka
.我尝试
defaultZone: http://eurekaserver:8761/eureka
。 but got the same error.但得到了同样的错误。
The docker file of Client is: Client的docker文件为:
FROM openjdk:17-jdk-alpine
ARG JAR_FILE=target/*.jar
COPY ${JAR_FILE} eurekaclient.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/eurekaclient.jar"]
Thanks in advance:)提前致谢:)
Try the following: The label after service-url property (which can be aliased as serviceUrl in YML) is a HashMap KEY, not a property label.请尝试以下操作:service-url 属性(在 YML 中可以别名为 serviceUrl)之后的 label 是 HashMap 密钥,而不是属性 label。 So it has to be kept as a Camel Case tag in any ways!
所以它必须以任何方式作为 Camel Case 标签保存!
eureka.client.service-url.defaultZone=http://[myIP@]:8787/eureka eureka.client.service-url.defaultZone=http://[myIP@]:8787/eureka
you can't register to eureka server by passing localhost.您无法通过传递 localhost 来注册到 eureka 服务器。
what you can do, give the container name in place of localhost and create one network, and while running the images specify the network as well.你可以做什么,用容器名称代替 localhost 并创建一个网络,并在运行图像时指定网络。
Please follow the below steps.请按照以下步骤操作。
Let's say your eureka images name is -> eureka-server假设您的 eureka 图像名称是 -> eureka-server
first, create a network using the below command:首先,使用以下命令创建一个网络:
docker create network springcloud-ms docker 创建网络 springcloud-ms
run the eureka container and specify the network as well like below:运行 eureka 容器并指定网络,如下所示:
docker run --name eureka-container -p 8761:8761 --network springcloud-ms eureka-server docker 运行 --name eureka-container -p 8761:8761 --network springcloud-ms eureka-server
change the application.yml of eureka client as below:更改尤里卡客户端的application.yml如下:
server: port: 8080 spring: application: name: EUREKA-CLIENT eureka: instance: hostname: eurekaclient client: serviceUrl: defaultZone: http://eureka-container:8761/eureka服务器:端口:8080 spring:应用程序:名称:EUREKA-CLIENT eureka:实例:主机名:eurekaclient 客户端:serviceUrl:defaultZone:http://eureka-container:8761/eureka
then run the client image.然后运行客户端映像。 Let's say your client image name is client-service then use the below command:
假设您的客户端图像名称是 client-service 然后使用以下命令:
docker run --name client-container -p 8080:8080 --network springcloud-ms client-service docker 运行 --name 客户端容器 -p 8080:8080 --network springcloud-ms 客户端服务
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.