2017-01-16 94 views
1

我有一个docker,docker-compose和Consul安装在我的本地机器上。现在我想用注册人在Consul注册我的一项服务。我的服务Dockerfile是这样简单:无法注册到注册器的Docker服务

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 

Wnen我运行上面的命令,我在控制台中一些大关键:

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服务器呈现的不错页面。但。我的任务是检查是否在领事注册。我检查它像这样:

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

但作为此命令的结果,我认为这在控制台:

{ 
    "consul": [] 
} 

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

+0

给那些投票的人。请分享你对这个话题的想法。 – Jacobian

+0

我误解了一些东西。起初,如果退出,你怎么可以向雅克比容器发出“卷曲”请求?第二,正如我看到领事登记员和你的apache服务器不相互沟通。为什么领事应该注册你的apache服务器? – Cortwave

+0

整个问题在于注册器容器如何运行。我删除了'-ip 127.0.0.1'并添加了'--net = host',它开始工作。 – Jacobian

回答

1

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

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

+0

谢谢!但是,请问如何通过'docker-compose.yml'设置这个'--net = host'参数?我在这个线程中提出了一个纯粹用于此参数的问题 - http://stackoverflow.com/questions/41681944/unable-to-run-registrator-using-docker-compose-get-connection-refused-error。所以,我热烈欢迎你,并希望你能分享一个更多的建议。谢谢! – Jacobian