Как я могу сопоставить порт контейнеров Docker с другим номером - но не на хосте - PullRequest
0 голосов
/ 09 апреля 2019

В целях тестирования я хотел бы запустить кластер из трех контейнеров, каждый из которых запускает одну и ту же службу на порту 7600. Эти контейнеры должны находиться в одной сети и теоретически иметь доступ к друг другу как host1:7600, host2:7600 и * 1003. *.

Однако я хочу «эмулировать» внешнее сопоставление портов, чтобы служба каждого контейнера по-прежнему была привязана к порту 7600, но чтобы службы могли подключаться друг к другу через сопоставленные (разные) порты, такие как host1:8881, host2:8882 и host3:8883.

Как мне сделать это как можно проще - предпочтительнее в настройке Docker Compose.

Причина в том, что я хочу проверить, как служба будет вести себя с конфигурацией трех физических хостов, на которых запущена эта служба, и сопоставить ее порт с произвольным внешним портом.

После некоторых изменений , чтобы прояснить задачу, после первых комментариев не будет выполнено требование (однако спасибо за каждый ответ).

  • Я не могу использовать виртуальные машины , поскольку тест уже запущен в VirtualBox без возможности запуска вложенного VT-x.
  • Я бы не привязывал порты к хосту и к одному IP-адресу.

1 Ответ

1 голос
/ 10 апреля 2019

После дальнейших исследований я нашел для меня рабочее решение.

Следующий файл Docker Compose показывает пример решения. В нем показано, как сделать две службы доступными для внешнего IP-адреса и внешнего порта. Этот пример полностью работает в Docker без необходимости запуска контейнеров на двух отдельных виртуальных машинах.

Эти две службы являются, например, двумя экземплярами Nginx. Представьте, что обе службы должны получать доступ друг к другу по своим внешним IP-адресам и портам для формирования кластера. Внешний IP и порт эмулируются двумя отдельными контейнерами busybox, отображающими порты сервисных контейнеров на их собственные IP.

version: '3'

services:

  service1:
    image: nginx:latest

  service2:
    image: nginx:latest

  proxy1:
    image: busybox:latest
    command: nc -lk -p 8081 -e /bin/nc service1 80
    expose:
      - "8081"

  proxy2:
    image: busybox:latest
    command: nc -lk -p 8082 -e /bin/nc service2 80
    expose:
      - "8082"

Сервисы service1:80 и service2:80 могут обращаться друг к другу через свои внешние представления proxy1:8081 и proxy2:8082

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...