领事不注销僵尸服务

Pet*_*fel 8 registration marathon docker consul

我正在用马拉松部署一个简单的hello world nginx容器,并且一切正常,除了我有6个不会从领事那里注销的容器。docker ps显示没有容器在运行。

我尝试使用/v1/catalog/deregister端点注销服务,但它们仍会返回。然后,我杀死了注册容器,并尝试再次注销。他们回来了。

我正在与

docker run -d --name agent-registrator -v /var/run/docker.sock:/tmp/docker.sock --net=host gliderlabs/registrator consul://127.0.0.1:8500 -deregister-on-success -cleanup
Run Code Online (Sandbox Code Playgroud)

有1个领事代理正在运行。

重新启动计算机(这是在本地vm上进行的单节点安装)不会使服务消失。

如何使这些容器消失?

Ale*_*hen 6

使用http api删除服务是另一个更好的解决方案。在弄清楚如何使用https api之前,我只是想出了如何手动删除服务。

要使用http api删除服务,请使用以下命令: curl -v -X PUT http://<consul_ip_address>:8500/v1/agent/service/deregister/<ServiceID>

请注意,您是三件事的结合:容器正在运行的主机的IP地址,容器的名称以及容器的内部端口(例如,对于Apache是​​80,对于js是3000,对于django是8000, ect)全部用colins分隔 :

以下是实际情况的示例: curl -v -X PUT http://1.2.3.4:8500/v1/agent/service/deregister/192.168.1.1:sharp_apple:80

如果您想要一种简单的方法来获取ServiceID,则只需卷曲包含僵尸的服务即可: curl -s http://<consul_ip_address>:8500/v1/catalog/service/<your_services_name>

这是一个名为someapp的服务的真实示例,该服务将返回其下的所有服务: curl -s http://1.2.3.4:8500/v1/catalog/service/someapp


hd.*_*man 0

尝试切换到v5

docker run -d --name agent-registrator -v /var/run/docker.sock:/tmp/docker.sock gliderlabs/registrator:v5 -internal consul://172.16.0.4:8500