2016-01-09 7 views
1

Пытается запустить кластер Couchbase в кластере Docker Swarm. После запуска кластера я хотел бы получить IP-адрес каждого экземпляра Couchbase динамически. docker inspect показывает:Доступ к IP-адресу контейнера Couchbase в кластере Docker Swarm

"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. Вы могли бы взглянуть на networking feature, который был представлен с Docker 1.9 для этого, не полагаясь на поиск IP-адресов хоста.

Смежные вопросы