Spring Cloud Netflix 和 Docker Compose - 无法向 eureka 注册服务
Posted
技术标签:
【中文标题】Spring Cloud Netflix 和 Docker Compose - 无法向 eureka 注册服务【英文标题】:Spring Cloud Netflix and Docker Compose - cannot register services with eureka 【发布时间】:2018-01-01 22:59:46 【问题描述】:我正在尝试使用 docker-compose 在本地(Ubuntu)运行 2 个简单服务:一个 eureka 服务器和配置服务器(它也是一个 eureka 客户端)。这两个都有简单的 dockerfiles 运行java -jar
,公开它们的端口,并且单独工作正常。我还尝试添加eureka.client.service-url.defaultZone=http://company-service-discovery:8761/eureka
以查看它是否会自行注册,并且有效。
我的配置服务器无法成功注册到 eureka 服务器,我用谷歌搜索了它,但我没有看到任何帮助我解决了这个问题。
根据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"
我使用相同的方法来配置我的服务,但是我的配置服务器在尝试注册时被拒绝连接:
docker-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
配置服务器 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 服务器 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
问题
我的配置有什么问题吗?我怎样才能让它工作?
如果缺少任何信息,请告诉我,我很乐意提供任何信息。
【问题讨论】:
【参考方案1】:也将defaultZone
配置添加到Eureka 服务器的属性中(并在您的配置服务器bootstrap.yml 中将service-url
更改为serviceUrl
)。
eureka 服务器 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
【讨论】:
我为此奋斗了好几天,直到今天我用mvn clean install
重新创建了 jar 后最终重新创建了 docker 图像。我很愚蠢,在属性文件中从 localhost
更改为服务名称 URL 后忘记了这样做。在那之后一切都结束了。现在不知道该怎么处理这个问题。我应该使用解决方案编辑原始帖子吗?【参考方案2】:
非常感谢。这篇文章解决了我的问题 - 使用 docker 将尤里卡客户端连接到尤里卡服务器。经过2天的搜索它工作。我流泪了。
所以基本上 -
您应该在 eureka 客户端的 application.properties/.yml 中使用以下内容
eureka.client.service-url.defaultZone=http://eureka-server:8761/eureka
在 docker-compose.yml 中,您的 eureka 服务名称应与 - url 主机名匹配,在我的情况下是 - eureka-server
【讨论】:
以上是关于Spring Cloud Netflix 和 Docker Compose - 无法向 eureka 注册服务的主要内容,如果未能解决你的问题,请参考以下文章
随手记录关于spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server
Spring Cloud 入门教程:和RabbitMQ的整合 -- 消息总线Spring Cloud Netflix Bus
Netflix之后,如何用Spring Cloud 新组件构建微服务架构?
spring-cloud-starter-eureka-server 和 spring-cloud-starter-netflix-eureka-server的区别
Spring cloud netflix 和 HystrixObservable --> JsonMappingException