N docker контейнеров из того же изображения с определением c N хост: сопоставления портов контейнера? - PullRequest
0 голосов
/ 01 мая 2020

Я пытаюсь вызвать произвольное (скажем, 50, чтобы это было динамическое c) количество контейнеров, используя docker. Эти контейнеры используют одно и то же изображение. Я хочу, чтобы все 50 контейнеров были привязаны к определенному диапазону портов хоста c, который я передаю (что-то вроде 9051 - 9150, каждый контейнер привязывается к двум портам). Контейнер каждый раз использует один и тот же порт (скажем, 1084-1085). По сути, я хочу, чтобы окончательная картинка выглядела примерно так:

  • Контейнер-1: 9051-9052: 1084-1085
  • Контейнер-2: 9053-9054: 1084-1085
  • Контейнер-3: 9055-9056: 1084-1085
    . , , 50 контейнеров

Материал, который я пробовал:

  • Определение диапазона портов в docker -compose и использование его с --scale:

    Здесь это раздел портов моей службы (предположим, что есть только одна служба):
ports:
    - "9051-9060:1084-1085"

После чего я запускаю docker-compose up --scale [service-name]=50, это не работает и понятно, так как каждый контейнер пытается связываться с любой доступный порт в данном диапазоне, а затем некоторые контейнеры (в основном те, которые подходят к концу) обнаружат, что порт уже занят. Я понимаю, что использование здесь является неправильным, потому что диапазон для каждого контейнера, а не для всей системы. (Или я здесь не прав?) Также пробовал с restart: always в надежде, что контейнер может попытаться перезапустить с другого порта. Не повезло. Есть ли способ избежать этого состояния гонки?

  • Нет сопоставлений хоста и просто использовать --scale:

ports:
    - "1084-1085"

В этом случае все 50 контейнеров подходят успешно, но это назначает эфемерные порты всем контейнерам. Не уверен, как действовать отсюда. Есть ли способ управлять этим эфемерным назначением порта?

Я пытаюсь найти элегантное решение для этого, вместо того, чтобы запускать docker run .. или docker-compose up .. в al oop в каком-то скрипте.

Мы также планируем использовать AWS Fargate в какой-то момент времени, делая то же самое. Таким образом, решение должно легко распространяться и на это.

Я открыт для предложений, даже если здесь есть основные fl aws и для решения этой проблемы нужна совершенно другая стратегия.

...