无法将registry服务注册到注册服务器

我有一个docker工人,docker-compose和Consul安装在我的本地机器上。 现在我想用注册商在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 

然后,我开始注册者容器,按照其中一个教程:

 $ 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 

这正是注册商领事容器,而我不喜欢的是它退出了。 我自己并没有这样做,所以真的很奇怪,它并不处于活跃状态。

我终于build立并运行我的php-apache容器:

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

在这一刻,一切都很好。 我甚至可以检查我的服务正在工作。 所以,当我去localhost:8181,我看到一个很好的页面与Apache Web服务器呈现。 但。 我的任务是检查是否在领事注册。 我检查它是这样的:

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

但是作为这个命令的结果,我在控制台中看到这个:

 { "consul": [] } 

所以,没有服务注册。 我的问题是为什么? 我做错了什么,我该如何解决? 谢谢!

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

PS我不知道你在curl请求中使用的jacobian-VirtualBox主机的真实地址。 在不是127.0.0.1的情况下,它将不起作用,并且您需要以其他方式将您的注册者容器与Consul服务连接起来(连接到其他networking或指定其他Consul服务器地址(如果在注册服务器容器内可用)。