2016-03-08 67 views
2

我有一個問題,在使用領事模板似乎代替服務「ServiceAddress」而不是我的模板中的「地址」,我不知道是否有人可以告訴我爲什麼。使用模板中的地址不ServiceAddress的領事模板

從我nginx的容器內的bash命令,其中領事模板也在運行,我可以從領事與獲取服務定義:

curl http://consul-server.service.consul:8500/v1/catalog/service/service1 
[{"Node":"ip-172-31-24-202","Address":"172.31.24.202","ServiceID":"ip-172-31-24-202:service1:23141","ServiceName":"service1","ServiceTags":null,"ServiceAddress":"172.17.0.3","ServicePort":32809}] 

我領事模板模板文件看起來像:

{{range service "service1"}}server {{.Address}}:{{.Port}}; 

我希望這將輸出Address,而不是服務的ServiceAddress。但是,下面的情況:

consul-template -consul consul-server.service.consul:8500 -template "/var/templates/service1.conf.tmpl" -dry -once 

server 172.17.0.3:32809 
+1

是的,它是如此令人困惑,我們沒有暴露服務目錄迭代W /'{{範圍服務「myservice」}}'。感謝您指出並暗示註冊人的'-ip'標誌。 – soosap

回答

2

我已經想通了這一點,.Address是領事響應元數據的一部分,和服務元數據的不是真正的一部分。這使我感到困惑,因爲我的領事客戶端運行在同一臺主機上。

我將-ip參數更改爲我運行的註冊器服務的參數,它是運行docker的主機的內部IP地址(而不是缺省值,它是Docker容器的IP地址)並且一切正常。