无法向Registor注册Docker服务



我在本地机器上安装了一个docker、docker compose和Consul。现在我想使用Registor在Consul注册我的一项服务。我的服务的Dockerfile很简单:

FROM php:7.0-apache
COPY code/ /var/www/html/
ENV SERVICE_ID=php
ENV SERVICE_NAME=php-apache

此外,我有领事在竞选。我可以用简单的命令来检查它,比如:

$ curl -X PUT 'Hello world ' 127.0.0.1:8500/v1/kv/msg1
$ curl 127.0.0.1:8500/v1/kv/msg1?raw
Hello world 

然后我启动registartor容器,遵循其中一个教程:

$ sudo docker run -d --name registrator-consul -v /var/run/docker.sock:/tmp/docker.sock 
-h jacobian-VirtualBox gliderlabs/registrator 
-ip 127.0.0.1 consul://127.0.0.1:8500

当我运行上面的命令时,我在控制台中得到了一些大密钥:

a25a48 ... 3b69

一切看起来都很好,因为我没有收到错误消息。然而,如果我检查

$ docker ps

我没有看到活动的图像

但同时,如果我运行

$ docker ps -a

我在最上面看到这一行:

CONTAINER ID    ...    STATUS
##somecode##    ...    Exited(1) 52 seconds ago

这正是注册领事集装箱,我不喜欢的是它退出了。我不是自己做的,所以它没有处于活动状态真的很奇怪。

我终于构建并运行了我的php apache容器:

$ docker build -t php-apache.
$ docker run -d --name php-apache -p 8181:80 php-apache

此刻,一切都很顺利。我甚至可以检查我的服务是否正常。因此,当我转到localhost:8181时,我看到了一个用Apache web服务器呈现的漂亮页面。但是。我的任务是检查它是否在Consul注册。我这样检查:

$ curl jacobian-VirtualBox:8500/v1/catalog/services | jq '.'

但由于这个命令,我在控制台中看到了以下内容:

{
"consul": []
}

因此,没有注册任何服务。我的问题是为什么?我做错了什么?我该怎么解决?谢谢

使用-h参数运行注册器。-h-只是容器的主机名,而不是部署容器的主机。您还可以将127.0.0.1作为Consul服务器地址传递给注册器。127.0.0.1是注册器容器的环回接口,不适用于运行Consul服务器的主机。如果您的Consul服务器在您的主机上运行(如果您可以通过127.0.0.1:8500访问它),那么您需要将--net=host参数添加到您的注册器运行中。

第页。S.我不知道你在curl请求中使用的jacobian-VirtualBox主机的真实地址。在这种情况下,如果不是127.0.0.1,它将不起作用,您需要通过其他方式将您的注册器容器与Consul服务连接(连接到其他网络或指定其他Consul服务器地址,如果它在注册器容器内可用。

最新更新