【发布时间】:2015-07-10 09:39:04
【问题描述】:
我正在编写一个应用程序,它由几个基于 Spring Boot 的微服务组成,前端有一个基于 zuul 的反向代理-
当我在我的机器上启动服务时它可以工作,但对于服务器部署,我想使用 docker 来提供服务,但这似乎现在不可能。
通常情况下,您会在容器外部有一个固定的“内部”端口和随机端口。但容器中的应用不知道外部端口(和 IP)。
Netflix 工具与我想要编写一个高效的微服务架构相匹配,并且在概念上我真的很喜欢 docker。 据我所知,启动容器会很麻烦,在主机上收集外部端口并传递给应用程序,因为您不能在应用程序启动后简单地更改端口。
有什么方法可以将 eureka 与基于 docker 的客户端一起使用?
[更新] 我想我在解释问题方面做得很差。所以也许这更能澄清一点:
eureka 服务器本身可以在 docker 中运行,因为我只有一个,外部端口无所谓。我可以使用链接功能从客户端访问它。
问题在于客户端注册自己的 URL。 例如 https://localhost:8080/ 但由于动态端口分配,它实际上只能通过 https://localhost:54321/ 访问
所以 eureka 会返回错误的服务 URL。
更新 我已经在下面更新了我的答案,所以看看那里。
【问题讨论】:
-
你在registry.hub.docker.com/search?q=eureka&searchfield= 和 3 zuul registry.hub.docker.com/search?q=zuul&searchfield= 上有 14 个带有 Eureka 的 docker 镜像,也许你应该看看相关的 Dockerfiles
-
问题是没有带有 eureka 的 docker 镜像。问题是客户端无法使用随机外部端口在 eureka 中注册,因为应用程序本身只知道内部端口。
-
>>> app 本身只知道内部端口 --> 可以使用卷来读写内部端口,见docs.docker.com/userguide/dockervolumes 见
docker run --volumes-from -
嗯,有办法获取主机上的外部端口,那么还有任务让eureka客户端使用这个而不是检测到的内部端口。我希望有人已经尝试过使用这种组合。
-
你是在一台机器上运行更多的 docker 实例(同一个服务),还是为什么你不能有固定的(外部)端口?
标签: docker spring-boot netflix-eureka netflix-zuul