spring cloud 无法从 docker 中的 zuul 获取服务
Posted
技术标签:
【中文标题】spring cloud 无法从 docker 中的 zuul 获取服务【英文标题】:spring cloud can't fetch service from zuul in docker 【发布时间】:2018-05-26 23:22:25 【问题描述】:我有一个简单的 spring cloud 项目,它包含 4 个服务:
配置:8888 registry(eureka):8761 网关(zuul):8080 service-1:9527enter image description here
项目部署在本地没有问题,
我可以在没有docker的情况下通过zuul成功获取service-1的api:
http://localhost:8080/service-1/test
但是当我使用 docker 部署时,
它抛出错误:Caused by: java.lang.RuntimeException: org.apache.http.conn.HttpHostConnectException: Connect to registry:9527 [registry/172.21.0.4] failed: Connection refused (Connection refused)
我只能使用 service-1 的 api 获取
http://localhost:9527/test
PS:这两个服务(gateway,service-1)已经成功注册到eureka
这是我的 docker-compose yml :
version: '3'
services:
config:
build: ./config
ports:
- "8888:8888"
registry:
build: ./registry
ports:
- "8761:8761"
depends_on:
- config
environment:
- SPRING_PROFILES_ACTIVE=prd
gateway:
build: ./gateway
depends_on:
- config
links:
- registry
- service-1
ports:
- "8080:8080"
environment:
- SPRING_PROFILES_ACTIVE=prd
service-1:
build: ./service-1
ports:
- "9527:9527"
depends_on:
- config
links:
- registry
environment:
- SPRING_PROFILES_ACTIVE=prd
谁能帮帮我?
【问题讨论】:
网关似乎存在配置错误。它正在尝试连接到registry:9527
。能否提供网关的application.properties。
我为 gateway 设置了最简单的配置,只需设置 server.port:8080 和 spring.application.name:gateway,其他配置是默认的,除了在 docker 中通过 zuul 获取 api 之外,它都可以工作
【参考方案1】:
我已经解决了这个问题,我忘了在网关主类上添加@EnableDiscoveryClient
,并覆盖了尤里卡实例主机名
【讨论】:
以上是关于spring cloud 无法从 docker 中的 zuul 获取服务的主要内容,如果未能解决你的问题,请参考以下文章
Docker 容器中的 Spring Cloud Config 无法访问
Spring Cloud Config Server 无法与 Docker 组合一起使用
Spring Cloud Netflix 和 Docker Compose - 无法向 eureka 注册服务