在Docker Swarm集群上访问Couchbase容器的IP地址

尝试在Docker Swarm集群上运行Couchbase集群。 集群启动后,我想dynamic获取每个Couchbase实例的IP地址。 docker inspect显示:

 "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地址的格式是什么?

属性.NetworkSettings.Ports是一个映射,而不是一个结构。 您可以使用index模板函数来访问地图(以及切片)值:

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

但请注意,这可能并不总是返回您所期望的。 如果容器被configuration为侦听所有主机接口,则这将简单地返回0.0.0.0 。 您可以查看Docker 1.9中引入的networkingfunction ,无需查看主机IP地址。