2015-03-02 96 views
1

我已經閱讀了有關使用Consul的Docker的服務發現,但我無法理解它。使用Consul的Docker容器通信

您能否向我解釋一下如何運行兩個碼頭集裝箱,從第二個使用Consul的第一個容器主機中識別併發送一些消息給它?

+0

難道我的回答可以幫助您? – jeremyjjbrown 2015-07-22 18:30:39

回答

2

您需要在每個Docker容器內以客戶端模式運行Consul Agent。每個Docker容器需要一個Consul Service Definition文件讓代理知道向Consul服務器宣傳它的服務。

他們看起來像這樣:

{ 
    "service": { 
    "name": "redis", 
    "tags": ["master"], 
    "address": "127.0.0.1", 
    "port": 8000, 
    "checks": [ 
     { 
     "script": "/usr/local/bin/check_redis.py", 
     "interval": "10s" 
     } 
    ] 
    } 
} 

而一個Service Health Check監視服務的健康。事情是這樣的:

{ 
    "check": { 
    "id": "redis", 
    "name": "Redis", 
    "script": "/usr/local/bin/check_redis_ping_returns_pong.sh", 
    "interval": "10s" 
    } 
} 

在其他泊塢集裝箱代碼會發現Redis的服務或者通過DNS或領事服務器HTTP API

dig @localhost -p 8500 redis.service.consul 

curl $CONSUL_SERVER/v1/health/service/redis?passing 
+0

當你說「每個Docker容器內部」時,你是否確實意味着不同的應用程序容器也應該運行consul代理?我不認爲這是必要的,並且違背了獨立容器分開任務的原則。 – 2016-11-11 17:34:30

+0

@VinceBowdren取決於你想要做什麼,以及你認爲的任務。如果它更適合你在奴隸或另一個容器上運行領事,並將它的代理人暴露在容器內,那就好了。但服務註冊和運行狀況檢查與運行應用程序二進制文件的容器是一致的,所以我希望將這些文件移動到爲其製作的容器中。 – jeremyjjbrown 2016-11-11 17:39:22

相關問題