Назад | Перейти на главную страницу

Как запустить несколько контейнеров докеров, доступных с другого хоста в той же сети

У меня есть машина с Windows 10 с установленным докером. Хост подключен к частной LAN 192.168.0.0/24. Мое приложение-контейнер предоставляет порт UDP и TCP. Я хотел бы запустить несколько экземпляров контейнера и сделать их доступными для других (не докеров) компьютеров в одной сети. Я должен иметь возможность использовать определенные номера портов, а не случайно сгенерированные. Как я могу это сделать?

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

Создать VLAN

Спрятано от https://docs.docker.com/machine/drivers/hyper-v/

  • В меню «Пуск» откройте диспетчер Windows 10 Hyper-V.
  • Справа нажмите Virtual Switch Manager.
  • Создать новую внешнюю сеть
  • Дайте ему краткое название
  • выберите свое сетевое устройство из раскрывающегося списка (устройство должно иметь активное соединение!)
  • Перезагрузка!

Создать узлы / машины

Контейнеры будут иметь сопоставление портов 1: 1 на хосте, поэтому мы создадим машину для каждого контейнера, который хотим запустить.

  • Создайте тонкую виртуальную машину (пока сделайте одну и повторите эту инструкцию для каждого контейнера по мере необходимости): docker-machine create --driver hyperv --hyperv-virtual-switch "concise_name" My_Node_1
  • Запустите Powershell с правами администратора
  • Переключите контекст команд докеров оболочки на новый компьютер: docker-machine env My_Node_1
  • Скопируйте и вставьте последнюю строку вывода (без символа #) в оболочку и запустите ее. Это будет примерно так: & "C:\Program Files\Docker Toolbox\docker-machine.exe" env My_Node_1 | Invoke-Expression Отныне все docker команды будут выполняться на машине My_Node_1.

Сборка и запуск

  • cd в каталог, содержащий Dockerfile
  • Создайте образ, например docker build . -t image_name
  • Теперь запустите контейнер (только один раз на машину), используя --net=host, например docker run -i -t -P -d --net=host --rm image_name

Промыть и повторить из «Создание узлов / машин» для необходимого количества контейнеров.