2016-03-04 3 views
3

У меня есть контейнер, который запускает приложение узла с тремя серверами: один сервер для общедоступных данных и два сервера webpack. По умолчанию они выполняются на портах 3000, 3001 и 3002, но все эти порты могут быть настроены.Контейнер для докеров с несколькими настраиваемыми портами

Кажется, что я смог бы запустить контейнер, как так:

docker run -p 3000:3003 -p 3001:3004 -p 3002:3005 -e 'APP_PORT=3003' \ 
    -e 'NG_PORT=3004' -e 'RC_PORT=3005' --expose 3003 --expose 3004 --expose 3005 \ 
    ajcrites/webf 

Однако есть две проблемы с этим подходом:

  1. Там огромное количество избыточности
  2. Я хочу, чтобы порты по умолчанию использовались/были открыты, если ничего не указано.

Есть ли более простой способ выставить все настраиваемые порты независимо от того, были ли они изменены по умолчанию?

+0

Опубликуйте этот комментарий на всякий случай. Возможно, это не то, что вы ищете (я не уверен, что хорошо понимаю, что вы ищете, если это не так, я извиняюсь), но есть опция ** - P **, которая автоматически назначает внешние порты для открытых портов. Плюс вы можете открыть порты, добавив директиву ** EXPOSE ** в файл докеров. – vmonteco

+0

yoiu не нужно повторять '-p', вы можете указать несколько разных портов (без их смежных). – Auzias

ответ

2

Вы не хотели бы, чтобы раскрыть все порты, однако вы можете выставить и связать по диапазону, по крайней мере, докер 1.5:

docker run -p 3000-3002:3003-3005 

Я не думаю, что вам нужно использовать --expose при публикации ,

+0

Вам еще не нужно делать' --expose' с теми же номерами портов? –

+0

Вы также можете указать диапазон. – Ray

+0

@ExplosionPills Expose предоставляет только открытые порты другим работающим службам в контейнере докеры, но не снаружи, поэтому вы всегда можете открыть широкий диапазон, если вам не нужно блокировать порт внутри докера: http://stackoverflow.com/questions/22111060/difference-between-expose-and-publish-in-docker – Ray

Смежные вопросы