docker中的Eureka客户端无法与Eureka服务器连接

问题描述 投票:0回答:4

我有一台尤里卡服务器。

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

我的 eureka 客户端正在 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 客户端的 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 实例中执行此操作。 谁能告诉我我在这里做错了什么?

docker spring-boot netflix-eureka
4个回答
4
投票
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


4
投票

确保您运行在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

这将注册到发现服务。


1
投票

在容器世界中,每次eureka服务器重启时,eureka服务器ip地址都会发生变化。因此,为 eureka 服务器 url 指定主机 IP 地址并不总是有效。

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

这已经在最近的另一篇文章中得到了回答:使用 docker-compose 时应用程序未注册到 eureka


0
投票

注意:- 仅使用小写字母大小写的容器名称

  version: '3'
services:
  openeyeserviceregistry:
    container_name: openeyeserviceregistry
    build:
      context: ./ServiceRegistry/OpenEyeServiceRegistry/
      dockerfile: Dockerfile
    ports:
      - "8761:8761"
    networks:
      - springboot-net
    restart: on-failure

  openeyeimageservice:
    container_name: openeyeimageservice
    build:
      context: ./ImageService/OpenEyeImageService/
      dockerfile: Dockerfile
    ports:
      - "8083:8083"
    environment:
      - eureka.client.service-url.defaultZone=http://openeyeserviceregistry:8761/eureka/
      - eureka.client.enabled=true
      - eureka.host=OpenEyeServiceRegistry
      - eureka.instance.preferIpAddress=true

    depends_on:
      openeyeserviceregistry:
        condition: service_started
    networks:
      - springboot-net
    restart: on-failure
    

networks:
  springboot-net:
    name: springboot-net
    driver: bridge
    external: true

尤里卡服务器的application.yml

server:
  port: 8761
spring:
  application:
    name: ServiceRegistry
eureka:
  instance:
    prefer-ip-address: true
    hostname: localhost
  client:
    registerWithEureka: false
    fetchRegistry: false
  server:
    waitTimeInMsWhenSyncEmpty: 0

eureka客户端申请

    server:
  port: 8083
spring:
  application:
    name: IMAGE-SERVICE
eureka:
  instance:
    prefer-ip-address: true
    hostname: localhost    
  client:
    registerWithEureka: true
    fetchRegistry: true
    service-url:
      defaultZone: http://127.0.0.1:8761/
  server:
    waitTimeInMsWhenSyncEmpty: 0

尤里卡服务器的 Docker 文件

FROM openjdk:17-jdk-alpine
WORKDIR /opt
ENV PORT 8082
EXPOSE 8082
MAINTAINER dheeraj198922
COPY ./target/OpenEye_Service_Registry.jar /opt
ENTRYPOINT ["java","-jar","OpenEye_Service_Registry.jar"]

eureka 客户端之前的 Dockerfile

 FROM openjdk:17-jdk-alpine
WORKDIR /opt
ENV PORT 8083
EXPOSE 8083
MAINTAINER dheeraj198922
COPY ./target/OpenEye_Image_Service.jar /opt
ENTRYPOINT ["java","-jar","OpenEye_Image_Service.jar"]
© www.soinside.com 2019 - 2024. All rights reserved.