2016-01-09 111 views
1

試圖在Docker Swarm集羣上運行Couchbase集羣。集羣啓動後,我想動態獲取每個Couchbase實例的IP地址。 docker inspect顯示:在Docker Swarm集羣上訪問Couchbase容器的IP地址

"NetworkSettings": { 
     "Bridge": "", 
     "SandboxID": "325807d55b552be3fe5b44b4d975c2486b3a56b320aa56fa0367e42348b82d64", 
     "HairpinMode": false, 
     "LinkLocalIPv6Address": "", 
     "LinkLocalIPv6PrefixLen": 0, 
     "Ports": { 
      "11207/tcp": null, 
      "11210/tcp": [ 
       { 
        "HostIp": "192.168.99.101", 
        "HostPort": "11210" 
       } 
      ], 

試圖訪問的IP地址,給出了錯誤:

docker inspect --format '{{ .NetworkSettings.Ports.8091/tcp[0].HostIp }}' 922755302fef 
Template parsing error: template: :1: unexpected ".8091" in operand; missing space? 

什麼是訪問的IP地址正確的格式?

回答

1

屬性.NetworkSettings.Ports是一個地圖,而不是一個結構。您可以使用index template function訪問地圖(以及片)值:但是

$ docker inspect --format '{{ index .NetworkSettings.Ports "8091/tcp" 0 "HostIp" }}' 

注意,這可能並不總是返回你所期望的。如果容器配置爲在全部主機接口上收聽,則此操作將簡單地返回0.0.0.0。您可以查看Docker 1.9爲此推出的networking feature,而不依賴查找主機IP地址。