докер рой контейнер связи - PullRequest
0 голосов
/ 07 мая 2018

Я создаю рой и присоединяюсь к узлу, очень хорошо, все отлично работает

docker swarm init --advertise-addr 192.168.99.1

docker swarm join - токен очень длинный генерируемый токен 192.168.99.1:2377

Я создаю 3 службы на менеджере роя

служба Docker создать --replicas 1 - имя nginx nginx - опубликовано = 80, цель = 80

служба Docker создать --replicas 1 - имя php php: опубликовано 7.1-fpm = 9000, цель = 9000

служба Docker создать --replicas 1 - имя postgres postgres: 9,5 опубликовано = 5432, цель = 5432

Все службы загружаются просто отлично, но если я настрою образ php в своем приложении и настрою nginx для прослушивания сокета php fpm, я не смогу найти способ взаимодействия этих трех служб. Даже если я обращаюсь к сервисам с помощью «docker exec -it service-id bash» и пытаюсь пропинговать имена контейнеров или имена хостов (я даже пытался их свернуть).

Что я пытаюсь сказать, так это то, что я не знаю, как настроить nginx для подключения к fpm, поскольку я не знаю, как один контейнер связывается с другим с помощью роя. Использовать docker-compose или docker run просто, как использовать опцию ссылок. Я прочитал всю документацию вокруг, провел часы на проб и ошибок, и я просто не мог обернуть голову вокруг этого. Я читал о сетке маршрутизации, хотел бы опубликовать порты, и это действительно делает для внешнего мира, но я не мог понять, если бы ip был опубликован для внутренних контейнеров, также это не может быть случайный ip как таковой вызовет проблемы с управлением конфигурацией моих приложений, даже конфигурациями nginx.

Ответы [ 3 ]

0 голосов
/ 09 мая 2018

Чтобы несколько контейнеров взаимодействовали друг с другом, они должны были работать в сети, созданной пользователем. В режиме роя вы хотите использовать оверлейную сеть, чтобы контейнеры могли работать на нескольких хостах.

docker network create -d overlay mynet

Затем запустите службы с этой сетью:

docker service create --network mynet ...

Более простое решение - использовать файл compose.yml для определения каждой из служб. По умолчанию службы в стеке развернуты в собственной сети:

docker stack deploy -c compose.yml stack-name
0 голосов
/ 09 мая 2018

Или вы можете просто сделать 1 Docker-compose и сделать из них стек Docker.

0 голосов
/ 09 мая 2018

Проще и надежнее объединить php_fpm и nginx в одном изображении. Я знаю, что это идет вразрез с официальным способом для изображений из одного приложения, но для случаев, таких как php_fpm + nginx, где вы должны иметь оба варианта для возврата запроса, это лучший случай. У меня есть образец WIP здесь: https://github.com/BretFisher/php-docker-good-defaults

...