簡體   English   中英

在 Docker 容器內時,Spring 微服務無法通過 Eureka 連接

[英]Spring Microservices Cannot Connect Via Eureka When Inside Docker Container

所以我一直在嘗試解決這個問題,4天后我仍然無法找到解決方案。 我已經使用 Spring Boot 構建了一個 API 網關,它通過 Zuul 充當 Eureka Server,並且我有一個充當 Eureka Client 的微服務。 當我在 Intellij 中本地運行它時,一切正常,它們發現並相互連接。 但是,當它們在容器中時,出現以下異常:

2022-05-16 12:42:49.087 WARN 1 --- [nfoReplicator-0] cndstdRetryableEurekaHttpClient:請求執行失敗並顯示消息:java.net.UnknownHostException:http 2022-05-16 12:42:49.088 WARN 1 -- - [nfoReplicator-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_USER/8322e6fdb2 35:user:8082 - 注冊失敗無法在任何已知服務器上執行請求

com.netflix.discovery.shared.transport.TransportException:無法在 com.netflix.discovery.shared.transport.decorator.RetryableEurekaHttpClient.execute(RetryableEurekaHttpClient.java:112) ~[eureka-client-1.9. 17.jar!/:1.9.17] 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator.register(EurekaHttpClientDecorator.java:56) ~[eureka-client-1.9.17.jar!/:1.9.17 ] at com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator$1.execute(EurekaHttpClientDecorator.java:5 9) ~[eureka-client-1.9.17.jar!/:1.9.17] at com.netflix.discovery .shared.transport.decorator.SessionedEurekaHttpClient.execute(SessionedEurekaHttpClient.java:77) ~[eureka-client-1.9.17.jar!/:1.9.17] 在 com.netflix.discovery.shared.transport.decorator.EurekaHttpClientDecorator。注冊(EurekaHttpClientDecorator.java:56)~[eureka-client-1.9.17.jar!/:1.9.17] at com.netflix.discovery.DiscoveryClient.register(DiscoveryClient.java:850)~[eureka-client-1.9 .17. jar!/:1.9.17] 在 com.netflix.discovery.InstanceInfoReplicator.run(InstanceInfoReplicator.java:121) [eureka-client-1.9.17.jar!/:1.9.17] 在 com.netflix.discovery.InstanceInfoReplicator $1.run(InstanceInfoReplicator.java:101) [eureka-client-1.9.17.jar!/:1.9.1 7] 在 java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) [na: 1.8.0_332] 在 java.util.concurrent.FutureTask.run(FutureTask.java:266) [na:1.8.0_332] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$201(ScheduledThreadPoolExecutor.java:180) [na :1.8.0_332] 在 java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:293) [na:1. 8.0_332] 在 java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [na:1.8.0_332] 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [na:1.8 .0_332] 在 java.lang.Thread.run(Thread.java:750) [na:1.8.0_332]

我的尤里卡服務器看起來像這樣:

Docker-compose.yaml

version: '3.8'
services:

  kwettergateway-docker:
    image: user/kwettergateway
    ports:
      - "8761:8761"
  userservice-docker:
    image: user/userservice
    ports:
      - "8082:8082"
    links:
      - kwettergateway-docker

應用程序屬性:

server.port=8761

#Gateway properties
spring.application.name=gateway
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
eureka.server.wait-time-in-ms-when-sync-empty=0
zuul.prefix=/api
zuul.routes.user.path=/user/**
zuul.routes.user.url=http://localhost:8082/

Dockerfile:

FROM openjdk:8
EXPOSE 8080
ADD target/kwettergateway-docker.jar kwettergateway-docker.jar
ENTRYPOINT ["java", "-jar", "/kwettergateway-docker.jar"]

我的尤里卡客戶端看起來像這樣:

應用程序屬性:

server.port=8082

#Gateway properties
spring.application.name=user
eureka.instance.prefer-ip-address=true
eureka.client.register-with-eureka=true
eureka.client.fetch-registry=true
eureka.client.serviceUrl.defaultZone=http://localhost:8761/eureka/

您嘗試使用 Docker 運行您的應用程序,因此在您的 application.properties 文件中,您應該將 localhost 替換為圖像名稱。 另外,需要提及的是,您應該使用@EnableEurekaServer標記您的 Eureka 服務器。 如果你想看看它,請訪問 - https://github.com/zhurasique/easycar

我不得不使用 docker 主機而不是 localhost。 所以它現在使用以下代碼:

eureka.client.serviceUrl.defaultZone=http://host.docker.internal:8761/eureka/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM