2017-01-16 122 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