Як я можу відкрити більше 1 порту за допомогою Docker?


459

Тож у мене є 3 порти, які слід піддавати інтерфейсу машини. Чи можливо це зробити за допомогою контейнера Docker?


1
Можливо перенаправлення декількох портів. Дивіться doco
Марк О'Коннор

Відповіді:


717

Щоб відкрити лише один порт, це потрібно зробити:

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 з піддавався , а потім виконати docker run -P(зверніть увагу на великі букви) , який автоматично виставляє всі порти , визначені з піддавався в Dockerfile
Тед Avery

Чи може кілька портів зупинити процес init під системним файлом обслуговування?
Ланті

1
Я думаю, що тут правильний термін - publishні expose.
tgogos

291

Крок 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 run -it -p 7100-7120:7100-7120/tcp 

18
EXPOSE - це лише документація для портів, які публікуються, і корисна лише для посилання. Повний список портів можна знайти за допомогою -P, і вони будуть автоматично перенесені на доступний порт на хості.
Арун Гупта

4
Експозиція не потрібна. Видаліть перший крок або зробіть його необов’язковим.
AmirHossein

27

якщо ви використовуєте docker-compose.ymlфайл:

services:
    varnish:
        ports:
            - 80
            - 6081

Ви також можете вказати порт хоста / мережі

varnish:
    ports:
        - 80:80
        - 6081:6081

0

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

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.