Я создал докерный рой с веб-сайтом внутри рой, издавая порт 8080 снаружи. Я хочу использовать этот порт, используя Nginx, который запускается за пределами роя на порту 80, который будет выполнять разрешение имен серверов и статические файлы хоста.Публикация порта док-станции рой только на localhost
Проблема заключается в том, что рой автоматически публикует порт 8080 в Интернете с использованием iptables, и я не знаю, можно ли разрешить использовать только локальный экземпляр nginx? Поскольку в настоящее время пользователи могут получить доступ к сайту как на портах 80, так и 8080, а второй - сломан (без изображений).
Пробовал играть с ufw, но он не работает. Также ручное изменение iptables было бы кошмаром, так как я должен был бы сделать это на каждом роевом узле после каждого обновления. Любые решения?
EDIT: Я не могу использовать одну и ту же сеть для рой и nginx вне рой, потому что наложенная сеть несовместима с обычными контейнерами с одним хостом. Теоретически я мог бы поставить nginx на рой, но я предпочитаю держать его отдельно на том же хосте, который содержит статические файлы.
Проблема заключается в том, что они не могут быть в одной и той же сети. Тип типа «Рой» накладывается, и если вы пытаетесь запустить обычный контейнер докеров, используя «docker run --net swarm_net», вы получаете ошибку, что сети несовместимы. Я знаю, что он работает с обычными контейнерами докеров, но рой меняет все. Кроме того, команда «docker service create» --публичная команда не поддерживает интерфейсы, поэтому ее невозможно сделать - опубликовать 127.0.0.1:8080:8080 – Valar
@ Валвар, @ Элтон-Стоунман прав. Вам просто нужно запустить каждый контейнер в качестве службы, и вы можете использовать параметр -publish, если вам нужно, но вы не укажете IP-адрес с помощью службы. При обслуживании в кластере SWARM при использовании --publish PORT: PORT он устанавливает его таким образом, чтобы этот порт отображался на КАЖДОМ узле в кластере, так как вы не знаете (если вы его не заставляете), какая машина в кластере служба будет проживать. Таким образом, устраните IP-адрес при выполнении команды 'docker service create' и опубликуйте только сопоставление портов:' --publish 8080: 8080' –
@Valar, например, запустите тестовую службу nginx со следующим: 'docker service create --publish 80:80 --replicas 1 --name test-nginx nginx' Подождите, пока 'docker service ls' покажет, что он запущен, а затем попробуйте http://127.0.0.1 с каждой машины в кластере или используйте свой IP-адрес адрес, и вы должны получить приветствие на странице nginx с каждой машины. ДАЖЕ, если у вас только один экземпляр. –