如何防止与领事和gliderlabs /注册人僵尸服务?

我正在使用gliderlabs / registrator容器的领事,向领事展示我的活动容器。 当我快速删除容器时,服务不会从领事中删除,从而导致不再存在的“僵尸”服务。 我听说有gliderlabs /registry容器可以使用额外的选项,以防止这样的 – -cleanup 。 但是,我还没有能够成功地运行任何注册人的这个选项。 这是我目前对我的注册人的docker运行命令:

 docker run -d -h $(hostname -i) --name registrator1 \ -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator \ consul://$(hostname -i):8500 

我需要在这个运行命令中添加什么来让注册者从已经不存在或已经失败的领事手中取出任何容器?

更新:我发现了这个问题

所以我正在使用我的领事集群和注册人一起运行群集。 为了给群集提供故障转移,我在我的consul群集前放置了负载均衡器,并将我的群集和注册器容器连接到负载均衡器的IP地址。 这使得任何领事节点都可以下山,而不会失去群体。

然而,swarm不会将自己注册为服务。 它将每个节点注册为一个密钥值,并且不被绑定到consul集群中的任何节点。 注册到注册人的领事的容器被创build为服务,并绑定到一个领事服务器。

我想现在发生的事情是,当我删除一个容器时,注册人去从领事删除服务,但只有33%的机会击中正确的领事服务器,并删除服务,因为我的LB只是循环。

我所有的swarm master,负载平衡器,领事服务器和swarm worker都在不同的机器上运行。 我的注册人正在我的群工机器上运行。 一切都在容器中运行。

启用粘性负载平衡是解决我的问题的临时修复。 不过,我认为试图在我的群体工作人员身上运行一些types的领事 ,并让注册人自己绑在当地东道主的领事身上。 我相信这可能是在领事github https://github.com/hashicorp/consul/tree/master/bench中描述的“板凳工人”。 我对领事还是比较陌生的,所以我仍然试图把它全部弄清楚。

答案就是在我所有的群体工人节点上运行领事工人,正式称为领事客户 。 这可以通过从我的progrium / consul运行命令中删除-server标记来完成。 然后,我的注册人只是向每台机器上运行的领事客户报告,而不是约束他们的领事服务器。 由于事前/领事已经过时而不再维持,所以当一个集装箱非正常停车(即docker stop以外的任何其他方式)并随后被移走时仍然存在僵尸问题。