2016-08-11 4 views
0

После установки моего роя сети с 3-мя узлы (Manager1, worker1, worker2), я создал наложенные сети:Доступ контейнер непосредственно

docker network create --driver=overlay testNet 

Затем создал сервис, основанный на couchbase (например, любой другое изображение обнажая нон лица без веб-пользовательский интерфейс, имеющий такой же вопрос)

docker service create --name db --network=testNet --publish 8091:8091 couchbase 

Если я пытаюсь получить доступ к веб-интерфейс, расположенный на порту 8091, все работает отлично, пока я не начать масштабирование службы до 2 (или более).

docker service scale db=2 

В этот момент, балансир рой нагрузки держит перенаправление запросов между 2 контейнеров, что делает непригодным для использования веб-интерфейса.

Есть ли способ решить эту проблему?

ответ

0

Я лично не рекомендую использовать Docker Swarm совместно с Couchbase Server, так как он имеет несоответствие импеданса. Было бы более целесообразно создавать контейнер Couchbase на каждом сервере, который требует его (и только один на сервер, чтобы избежать одиночных точек отказа!), А затем переадресовать соответствующие порты на этом сервере.

Несмотря на это, ответ в этом случае будет заключаться в доступе к каждому узлу/контейнеру в отдельности, вы можете сделать это, обратившись к контейнеру через его собственный IP-адрес. Вы можете идентифицировать этот IP, захватив идентификатор контейнера, используя docker ps, а затем ищем IP-адрес в docker inspect <container id>.

+0

закрытый IP-адрес контейнера недоступен вне рой. то, что я сделал на данный момент, - запустить прокси-контейнер, который перенаправляет запрос на частный IP-адрес. – mathieu

+0

относительно couchbase на рое, я вижу вашу точку, но как я могу зарегистрировать контейнеры couchbase на рое DNS, чтобы получить к ним доступ без жесткого кодирования их IP-адресов? – mathieu