Docker не будет публиковать порт в Swarm

У меня настроен рой с двумя узлами, одним менеджером и одним работником. Я хотел бы опубликовать порт в Swarm, чтобы я мог получить доступ к своим приложениям, и мне интересно, как мне этого добиться.

version: '2'
services:
  server:
    build: .
    image: my-hub.company.com/application/server:latest
    ports:
      - "80:80"

Это открывает порт 80, когда я запускаю docker-compose, и он работает просто отлично, однако, когда я запускаю пакетное развертывание

docker deploy my-service

Это не будет публиковать порт, поэтому он просто говорит 80/tcp в Docker PS, а не указывает на порт. Может быть, это потому, что мне нужно присоединить балансировщик нагрузки или запустить какую-то необычную команду, или, может быть, добавить еще один уровень конфигурации, чтобы фактически выставить этот порт в нескольких хостах.

Может кто-нибудь помочь мне понять, что мне нужно настроить / сделать, чтобы это выставить порт.

В моем лучшем случае сценарий 80 будет открыт, и если я получу доступ к нему с разных имен хостов, он отправит меня в разные приложения.

Обновление: кажется, работает, если я запускаю следующие команды после развертывания приложения

docker service update -p 80:80 my-service_server
docker kill <my-service_server id>

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

https://github.com/docker/dockercloud-haproxy

Внизу есть хорошее описание, описывающее, как должна выглядеть сеть:

Internet -> HAProxy -> Service_A -> Container A

Однако я не могу найти способ связать сервисы с помощью команды docker service create, теперь оптимально выглядит как способ настройки сети, и когда я применяю эту сеть к сервису, он забирает ее в HAProxy.

- Маркус

3 ответа

Решение

Режим Swarm публикует порты по-другому. Это не будет отображаться в docker ps поскольку он не публикует порт на хосте, он публикует порт для всех узлов, что позволяет распределять нагрузку между репликами служб.

Вы должны увидеть порт из docker service inspect my-service,

Любая другая служба должна иметь возможность подключиться к my-service:80

Насколько я понял, на данный момент вы можете просто опубликовать порты, обновляющие сервис, после создания:

docker service update my-service --publish-add 80:80

docker service ls отобразит сопоставления портов.

Другие вопросы по тегам