2017-02-02 12 views
0

Я пытаюсь создать и запустить контейнер из моего метода службы REST. Моя служба REST находится на машине Unix, и из внешних систем потребуется несколько запросов для настройки и запуска нескольких контейнеров докеров в машине, используя мою службу REST, которая также находится на той же машине.Создание случайных неперекрывающихся портов привязки докеров

Мой вопрос в том, как я могу определить, на каком порту я могу запустить свой контейнер. Каждый запрос к моему методу REST должен запускать контейнер на уникальном порту, который не использовался в предыдущих запросах. Если я создаю случайный номер порта, мне нужен какой-то способ гарантировать, что тот же номер не будет восстановлен, иначе он создаст конфликт порта.

Мне нужно генерировать случайный номер порта каждый раз, не повторяясь, где-то хранить список использованного порта и проверять список каждый раз, когда я генерирую случайное число, чтобы убедиться, что порт не был использован, отпустите порт, когда контейнер остановлен (обновите список «ports-in-use», чтобы удалить остановленный контейнер). любая идея о том, как это сделать в Java? Заранее спасибо

ответ

1

Зачем вам рандомизировать перенос портов?

Просто диапазон портов, который вы хотите использовать на вашей машине (скажем, 28000 до 28900)

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

Зачем вам трудно, когда это может быть легко? ^^

Если вам действительно нужна рандомизация игнорируя уже принятый порт, то вы можете проверить эту тему: Generate random numbers except certain values

+0

Любых указателей о том, как мы проверяем первый доступный порт в диапазоне? – user1722908

+0

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