Как я могу открыть более 1 порта с помощью Docker?

458

Таким образом, у меня есть 3 порта, которые должны быть открыты для интерфейса машины. Возможно ли это сделать с помощью контейнера Docker?

nubela
источник
1
Возможно перенаправление нескольких портов. См. Документацию: docs.docker.io/en/latest/use/port_redirection
Марк О'Коннор,

Ответы:

716

Чтобы выставить только один порт, вот что вам нужно сделать:

docker run -p <host_port>:<container_port>

Чтобы выставить несколько портов, просто предоставьте несколько -pаргументов:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Таня Анг
источник
4
Спасибо! Нашел это в документации здесь: docs.docker.com/userguide/dockerlinks/… где говоритсяNote: The -p flag can be used multiple times to configure multiple ports.
Тед М. Янг
Есть ли способ указать порты в файле конфигурации? Например, используя опцию --env-file?
Джованни Битлинер
8
@GiovanniBitliner Я все еще довольно новичок в этом, но я уверен, что вы определите порты в Dockerfile с помощью EXPOSE , а затем выполните docker run -P(обратите внимание на верхний регистр), который автоматически выставляет все порты, определенные с помощью EXPOSE в Dockerfile
Тед Эйвери
Несколько портов могут остановить процесс инициализации в файле службы systemd?
Lanti
1
Я думаю, что правильного термина здесь publishнет expose.
tgogos
290

Шаг 1

В вашем Dockerfile, вы можете использовать глагол, EXPOSEчтобы выставить несколько портов.
например

EXPOSE 3000 80 443 22

Шаг 2

Затем вы хотели бы создать новое изображение на основе выше Dockerfile.
например

docker build -t foo:tag .

Шаг 3

Затем вы можете использовать -pдля отображения порта хоста с контейнерным портом, как это определено в выше EXPOSEиз Dockerfile.
например

docker run -p 3001:3000 -p 23:22

В случае, если вы хотите выставить диапазон непрерывных портов, вы можете запустить Docker следующим образом:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
источник
17
EXPOSE - это только документация для опубликованных портов, которая полезна только для связи. Полный список портов можно найти с помощью -P, и они будут автоматически сопоставлены с доступным портом на хосте.
Арун Гупта
4
Выставлять не нужно. Удалите первый шаг или сделайте его необязательным.
Амир Хоссейн
27

если вы используете docker-compose.ymlфайл:

services:
    varnish:
        ports:
            - 80
            - 6081

Вы также можете указать хост / сетевой порт

varnish:
    ports:
        - 80:80
        - 6081:6081
Рашидул Ислам
источник
0

Если вы создаете контейнер из изображения и хотите выставить несколько портов (не публиковать), вы можете использовать следующую команду:

docker create --name container name--expose 7000 --expose 7001image name

Теперь, когда вы запустите этот контейнер с помощью docker startкоманды, настроенные выше порты будут доступны.

PhantomReference
источник