docker - docker 中的 Eureka 客户端未与 Eureka 服务器连接

标签 docker spring-boot netflix-eureka

我有一台 Eureka 服务器。

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

我有一个 Eureka 客户。
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 服务器
之后,我开始使用 Eureka 客户端的 docker 实例
sudo docker build -t web .sudo docker run -p 8180:8020 -it web .
我可以从浏览器访问 Eureka 客户端和服务器,但客户端没有连接 Eureka 服务器。我无法在 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 实例中执行此操作。
谁能告诉我我在这里做错了什么?

最佳答案

确保你在 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

这将注册到发现服务。

关于docker - docker 中的 Eureka 客户端未与 Eureka 服务器连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47539086/

相关文章:

docker - docker从容器到主机系统共享文件夹

postgresql - 使用 docker-compose 删除命名卷?

java - 为什么我无法使用虚拟主机名来获取我的微服务?

kubernetes - 我可以在spring cloud中使用kubernetes作为服务发现吗?

docker - Netflix/Conductor 打印了太多与 dynomite 相关的日志

docker - 如何将私有(private)组织镜像从 docker hub 部署到 kubernetes

java - 通过 Yaml 配置 H2 数据库 - Spring Boot

mongodb - Spring 数据匹配和过滤嵌套数组

java - context.getBean 抛出 NoSuchBeanDefinitionException

java - Spring Cloud Gateway 自动路由到 Eureka 服务