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