我有一个设置,我在docker swarm overlay网络中部署spring-cloud-consul应用程序。在我的覆盖网络中,我在每个节点上创建了领事图像。当我启动spring-cloud-consul应用程序时,我必须指定它应该与之交谈的领事代理的主机名,例如" discovery"所以它可以宣传自己并查询服务发现。这里的问题是每个容器都在查询同一个领事代理。当我删除这个特定的consul代理时,Ribbon DiscoveryClient似乎依赖于它自己的缓存而不是使用其他一个consul节点。
使用spring-cloud-consul和consul启动微服务应用程序的正确方法是什么,这样他们就不依赖于一个固定的领事代理。
我想到的解决方案:
感谢您的帮助。
答案 0 :(得分:0)
consul代理必须在群集中的每个节点上运行。没有必要在每个docker容器内运行consul代理,只需在每个节点上运行。您可以选择在每个节点上安装consul代理,或者在每个节点上的docker容器中运行consul代理。
对于docker容器解决方案中的consul代理,您需要确保在其他容器启动之前运行consul agent容器。
有关在docker容器中以客户端模式运行consul代理的详细信息,请参阅:https://hub.docker.com/_/consul/并在客户端模式下搜索Running Consul Agent。这使用--net = host networking定义代理容器,因此当代理实际上位于docker容器中时,代理的行为就像本机安装一样。