使用zuul路由到docker中的不同容器不起作用
Posted
技术标签:
【中文标题】使用zuul路由到docker中的不同容器不起作用【英文标题】:Routing to different container in docker using zuul not working 【发布时间】:2017-01-26 23:53:55 【问题描述】:我有 2 个微服务(spring boot 应用程序)在不同的 docker 容器中运行并配置了 zuul api 网关。路由到其他容器不起作用。容器 1 运行在 8030 端口,容器 2 运行在 8030 端口。
下面是application.yml中的zuul配置-
server:
port: 8030
# TODO: figure out why I need this here and in bootstrap.yml
spring:
application:
name: zuul server
endpoints:
restart:
enabled: true
shutdown:
enabled: true
health:
sensitive: false
zuul:
routes:
zuultest:
url: http://localhost:8080
stripPrefix: false
ribbon:
eureka:
enabled: false
当通过 localhost:8030/zuultest/test 访问时,我得到的异常为 -
2016-09-19 09:10:14.597 INFO 1 --- [nio-8030-exec-3] hello.SimpleFilter : GET request to http://localhost:8030/zuultest/test
2016-09-19 09:10:14.600 WARN 1 --- [nio-8030-exec-3] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
我能知道我为什么会得到这个吗?
【问题讨论】:
【参考方案1】:您可以使用 docker-compose.yml 中的链接选项来链接两个容器。
demo1:
image: <demo1 image name>
links: - demo2
demo2:
image: <demo2 image name>
然后在 zuul:routs:url 配置中,您可以使用容器名称,demo2,而不是 IP。
【讨论】:
【参考方案2】:您是如何启动这 2 个容器的?如果您将它们暴露给 docker 主机,则两者不能具有相同的端口。
docker run --name service A --net=host -p 8030:8030 ...
docker run --name service B --net=host -p 8030:8031 ...
没有这个,如果你调用 localhost:8030,你调用的是主机(而不是容器),你没有得到响应。
使用不同端口启动它们时需要将端口映射到主机,并使用localhost调用它们到正确的暴露端口
【讨论】:
以上是关于使用zuul路由到docker中的不同容器不起作用的主要内容,如果未能解决你的问题,请参考以下文章
SpringCloud微服务(05):Zuul组件,实现路由网关控制
SpringCloud微服务(05):Zuul组件,实现路由网关控制
Docker容器上传到gcp cloud-run,核心Web api应用程序不起作用