Docker中的Eureka客户端不与Eureka服务器连接



我有一个eureka服务器。

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服务器之后,我正在使用Eureka客户端的Docker实例 sudo docker build -t web .sudo docker run -p 8180:8020 -it web。我可以从浏览器访问尤里卡客户端和服务器,但客户端没有与尤里卡服务器连接。我无法在Eureka服务器仪表板中看到客户端。我要低于错误和警告。

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)

$ docker swarm init

创建了一个覆盖网络,因此服务可以互相ping。

$ docker network create -d overlay mybridge

设置应用程序。

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

现在创建第一个发现服务(Eureka Discover Server)

$ 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

这将注册到发现服务。

在容器世界中,尤里卡服务器IP地址每次重新启动时都可以更改。因此,指定Eureka服务器URL的主机IP地址一直无法正常工作。

在docker-compose.yml中,我必须将尤里卡客户端服务链接到尤里卡服务器容器。在链接服务之前,尤里卡客户端无法连接到服务器。

最近在另一篇文章中已经回答了这一点:使用Docker-Compose

时未注册eureka的应用程序。

最新更新