docker中无法通过ZUUL api网关连接微服务

Posted

技术标签:

【中文标题】docker中无法通过ZUUL api网关连接微服务【英文标题】:Unable to connect to micro service through ZUUL api gateway in docker 【发布时间】:2021-02-01 07:57:10 【问题描述】:

当它们部署在 localhost(通过 Eclipse)时,我已经跟踪服务并且工作正常。但部署为单独的 docker 容器时无法调用其余服务。

我是新手,参加了教程以了解其工作原理。

以下服务在单独的 docker 容器中运行并配置如下(本地环境)

尤里卡

Docker IP : 172.17.0.3
Docker port mapping : 8761:8761

spring.application.name=naming-server
server.port=8761

Zuul API 网关方式

Docker IP : 172.17.0.4
Docker port mapping : 8765:8765

spring.application.name=gateway-server
server.port=8765

用户服务

Docker IP : 172.17.0.5
Docker port mapping : 8101:8101

spring.application.name=user-service
server.port=8101

Eureka 中的注册服务信息

应用程序 AMI 可用区状态

USER-SERVICE n/a (1) (1) UP (1) - de4396a354ea:user-service:8101

API-GATEWAY n/a (1) (1) UP (1) - e5dd509065cd:api-gateway:8765

当试图通过网关调用“用户服务”中的服务时,它会抛出异常

    com.netflix.zuul.exception.ZuulException: Forwarding error
        at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.handleException(RibbonRoutingFilter.java:198) ~[spring-cloud-netflix-zuul-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]
        at org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:173) ~[spring-cloud-netflix-zuul-2.2.0.RELEASE.jar!/:2.2.0.RELEASE]

    Caused by: java.net.UnknownHostException: de4396a354ea: Name or service not known
        at java.base/java.net.Inet4AddressImpl.lookupAllHostAddr(Native Method) ~[na:na]
        at java.base/java.net.InetAddress$PlatformNameService.lookupAllHostAddr(InetAddress.java:929) ~[na:na]
        at java.base/java.net.InetAddress.getAddressesFromNameService(InetAddress.java:1515) ~[na:na]

注意:“de4396a354ea”是“用户服务”的容器 ID

请指导如何解决此问题,并提供任何链接,以便我可以获取有关在 docker 容器中部署微服务的更多信息。

【问题讨论】:

【参考方案1】:

可以通过添加“eureka.instance.hostname="属性来解决这个问题。

【讨论】:

以上是关于docker中无法通过ZUUL api网关连接微服务的主要内容,如果未能解决你的问题,请参考以下文章

第六章API服务网关(Zuul) 下

解决思路:通过Zuul上传文件接口无返回值的问题

NodeJS 应用程序无法从 Zuul API 网关访问

zuul路由网关

Zuul2.0实现微服务网关

SpringCloud - Zuul路由网关