Docker deploy не будет публиковать порт в 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>

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

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

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

Internet -> HAProxy -> Service_A -> Container A

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

-- Маркус

3 ответов


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

вы должны увидеть порт с docker service inspect my-service.

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


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

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

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