簡體   English   中英

docker 中的 Eureka 客戶端未與 Eureka 服務器連接

[英]Eureka client in docker not connecting with Eureka server

我有一台尤里卡服務器。

server:
  port: 8761
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false

我有一個尤里卡客戶。

spring:
  application:
    name: mysearch
server:
  port: 8020
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka
  instance:
    preferIpAddress: true

我的尤里卡客戶端在 docker 容器中運行。

FROM java:8
COPY ./mysearch.jar /var/tmp/app.jar
EXPOSE 8180
CMD ["java","-jar","/var/tmp/app.jar"]

我通過java -jar eureka-server.jar啟動 eureka 服務器之后,我使用sudo docker build -t web .啟動 eureka 客戶端的 docker 實例sudo docker build -t web . sudo docker run -p 8180:8020 -it web 我可以從瀏覽器訪問尤里卡客戶端和服務器,但客戶端沒有連接尤里卡服務器。 我無法在尤里卡服務器儀表板中看到客戶端。 我收到以下錯誤和警告。

WARN 1 --- [tbeatExecutor-0] c.n.d.s.t.d.RetryableEurekaHttpClient    : Request execution failed with message: java.net.ConnectException: Connection refused (Connection refused)
ERROR 1 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020 - was unable to send heartbeat!
INFO 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020: registering service...
ERROR 1 --- [nfoReplicator-0] c.n.d.s.t.d.RedirectingEurekaHttpClient  : Request execution error
WARN 1 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient    : Request execution failed with message: java.net.ConnectException: Connection refused (Connection refused)
WARN 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_FLIGHTSEARCH/98b0d95fd668:flightsearch:8020 - registration failed Cannot execute request on any known server
WARN 1 --- [nfoReplicator-0] c.n.discovery.InstanceInfoReplicator     : There was a problem with the instance info replicator

我在 AWS EC2 Ubuntu 實例中執行此操作。 誰能告訴我我在這里做錯了什么?

server:
  ports:
      - "8761:8761"
eureka:
  client:
    registerWithEureka: false
    fetchRegistry: false

通過上述更改,端口 8761 將在主機上公開並可以連接到服務器。 作為您使用 localhost “ http://localhost:8761/eureka ”的連接,它正在主機上搜索端口 8761。

在 Eureka 客戶端配置中使用主機 ip 而不是 localhost ,因為如果使用 localhost 它將在容器內搜索端口 8761

http://hostip:8761/eureka

確保你在 Swarm 模式下運行。(單節點也可以運行 Swarm)

$ docker swarm init

創建了一個覆蓋網絡,以便服務可以相互 ping。

$ docker network create -d overlay mybridge

為 eurika 客戶端設置 application.property 如下

eureka.client.service-url.defaultZone=http://discovery:8761/eureka

現在創建第一個發現服務(Eureka 發現服務器)

$ docker service create  -d --name discovery --network mybridge \
    --replicas 1 -p 8761:8761 server-discovery

打開瀏覽器並點擊任何端口為 8761 的節點

現在創建客戶端服務:

$ docker service create  -d --name goodbyeapp --network mybridge \
    --replicas 1 -p 2222:2222 goodbye-service

這將注冊到發現服務。

在容器世界中,eureka服務器每次重啟時eureka服務器ip地址都可以改變。 因此,為 eureka 服務器 url 指定主機 ip 地址並不總是有效。

在 docker-compose.yml 中,我必須將 eureka 客戶端服務鏈接到 eureka 服務器容器。 在我鏈接服務之前,尤里卡客戶端無法連接到服務器。

最近在另一篇文章中已經回答了這個問題: Applications not registering to eureka when using docker-compose

暫無
暫無

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

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