Spring Cloud Netflix和Docker Compose - 无法使用eureka注册服务

时间:2017-07-26 14:33:33

标签: spring-boot docker-compose spring-cloud netflix-eureka

我尝试使用docker-compose在本地运行2个简单服务(Ubuntu):eureka服务器和配置服务器(也是eureka客户端)。这两个都有简单的dockerfiles运行java -jar,暴露他们的端口,并单独工作正常。我还尝试添加eureka.client.service-url.defaultZone=http://company-service-discovery:8761/eureka以查看它是否会自行注册,并且有效。

我的配置服务器无法成功注册到eureka服务器,我已经用Google搜索过,我见过的任何内容都没有帮助我解决这个问题。

根据https://docs.docker.com/compose/networking/上的docker-compose文档:

  

默认情况下,Compose会为您的应用设置单个网络。服务的每个容器都加入默认网络,并且可以被该网络上的其他容器访问,并且可以通过与容器名称相同的主机名发现。

使用以下示例web应该能够使用postgres://db:5432与数据库进行通信。

version: "3"
services:
  web:
    build: .
    ports:
      - "8000:8000"
  db:
    image: postgres
    ports:
      - "8001:5432"

我使用相同的方法来配置我的服务,但我的配置服务器在尝试注册时拒绝连接:

搬运工-compose.yml

version: '3.3'
services:
  company-service-discovery:
    build: company-service-discovery/
    ports:
      - "8761:8761"
  company-config-server:
    build: company-config-server/
    ports:
      - "8888:8888"
    links:
      - company-service-discovery

config server bootstrap.yml

server:
  port: 8888

management:
  security:
    enabled: false

spring:
  application:
    name: company-config-server
  cloud:
    config:
      server:
        native:
          search-locations: classpath:/shared
  profiles:
    include: native

eureka:
  client:
    service-url:
      defaultZone: http://company-service-discovery:8761/eureka

eureka server bootstrap.yml

spring:
  application:
    name: company-service-discovery

server:
  port: 8761

management:
  security:
    enabled: false

的异常

2017-07-26 14:25:05.738  WARN 1 --- [nfoReplicator-0] c.n.d.s.t.d.RetryableEurekaHttpClient    : Request execution failed with message: java.net.ConnectException: Connection refused (Connection refused)
2017-07-26 14:25:05.739  WARN 1 --- [nfoReplicator-0] com.netflix.discovery.DiscoveryClient    : DiscoveryClient_COMPANY-CONFIG-SERVER/365d20275ab0:company-config-server:8888 - registration failed Cannot execute request on any known server

问题

我的配置有什么问题吗?我怎样才能使它发挥作用?

如果有任何信息缺失,请告诉我,我很乐意提供任何信息。

2 个答案:

答案 0 :(得分:1)

defaultZone配置添加到Eureka服务器的属性中(并将service-url更改为 配置服务器bootstrap.yml中的serviceUrl < / EM> )。

eureka server bootstrap.yml

spring:
  application:
    name: company-service-discovery

eureka:
  client:
    serviceUrl:
      defaultZone: http://company-service-discovery:8761/eureka

server:
  port: 8761

management:
  security:
    enabled: false

答案 1 :(得分:0)

非常感谢。这篇文章解决了我的问题-使用docker将eureka客户端连接到eureka服务器。经过2天的搜索工作。我哭了。

所以基本上-

您应该在eureka客户端的application.properties/.yml中使用以下

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

,在docker-compose.yml中,您的eureka服务名称应与-url主机名匹配,在我的情况下,该名称应为-eureka-server