#docker #docker-compose
Вопрос:
Согласно документации раздела порты в файле docker compose, когда мы опускаем порт хоста, он будет выбран случайным образом. Например:
ports:
- "80" # container port: 80, host port: ephemeral(random)
Чем это полезно? Как эта функция используется на практике?
Ответ №1:
Термин «эфемерный» обычно определяется как атрибут чего-то, что имеет короткий срок службы. Здесь это означает, что каждый раз, когда вы перезапускаете контейнер, он будет сопоставляться с другим «случайным» портом хоста. Обычно это очень большой номер порта, больше 60000. Я вижу три варианта использования, в которых такое поведение может быть полезным:
- Это гарантирует отсутствие конфликтов портов с другими службами, уже запущенными на хосте. Допустим, на порту 80 работает служба Apache, запуск контейнера nginx с синтаксисом одного порта «80» не приведет к ошибке. Это может упростить тестирование. Вы можете быстро протестировать службу, не останавливая другую, которая занимает порт.
- Он также может быть использован в качестве некоторой функции безопасности. Когда открытые порты хоста периодически меняются случайным образом, проникнуть в систему будет сложнее.
- Я полагаю, что варианты использования, для которых он на самом деле предназначен, — это развертывание стека нескольких
экземпляров, использующих одни и те же внутренние контейнерные порты. Чтобы узнать фактические порты после развертывания, вы можете запустить сценарий, который проверяет каждый экземпляр с помощью «docker inspect» и передает эту информацию другим зависимым службам.
Кто-нибудь знает еще одного? Не стесняйтесь добавлять/редактировать.