Pat*_*sen 17 docker spring-boot netflix-eureka netflix-zuul
我正在编写一个应用程序,它由一些基于弹簧启动的微服务组成,前面有一个基于zuul的反向代理 -
当我在我的机器上启动服务时,它可以工作,但是对于服务器的推出,我想使用docker作为服务,但现在似乎不可能.
通常,您将在容器外部具有固定的"内部"端口和随机端口.但容器中的应用程序不知道外部端口(和IP).
Netflix工具符合我想要编写的高效微服务架构,概念上我非常喜欢docker.据我所知,启动容器会非常麻烦,在主机上收集外部端口并将其传递给应用程序,因为在应用程序启动后您无法简单地更改端口.
有没有办法使用eureka与基于docker的客户端?
[更新]我想我解释这个问题做得不好.所以也许这可以澄清一点:
eureka服务器本身可以在docker中运行,因为我只有一个,外部端口无关紧要.我可以使用链接功能从客户端访问它.
问题是客户端注册自己的URL.这是例如https:// localhost:8080 /但由于动态端口分配,它实际上只能通过https:// localhost:54321 /访问
因此,eureka将返回错误的服务URL.
更新 我已在下面更新了我的答案,所以看看那里.
我自己找到了一个解决方案,这可能不是最好的解决方案,但它适合我......
当您使用"--net = host"(主机网络)启动docker时,您可以直接使用主机网络堆栈.然后我只使用0作为spring-boot的端口,spring为我随机化了端口,因为它使用的是主机网络堆栈,所以没有转换到不同的端口(和IP).
但是有一些缺点:
我希望它有所帮助
很多时间过去了,我想我应该进一步详细说明:
如果您使用docker托管您的spring应用程序,请不要使用随机端口!使用固定端口,因为每个容器都会获得自己的IP,因此每个服务都可以使用相同的端口.这使生活变得更加容易.
如果您有面向公众的服务,那么无论如何您都会使用固定端口.
对于通过maven本地启动或者例如命令行有一个使用随机端口的专用配置文件,因此您没有冲突(但请注意,随机端口和服务注册存在或存在一些错误)
如果由于某种原因你想要或需要使用主机网络,你当然可以使用随机端口,但大多数时候你不应该!
| 归档时间: |
|
| 查看次数: |
3867 次 |
| 最近记录: |