Jak mogę udostępnić więcej niż 1 port za pomocą Dockera?

Odpowiedzi:

715

Aby udostępnić tylko jeden port, musisz to zrobić:

docker run -p <host_port>:<container_port>

Aby udostępnić wiele portów, wystarczy podać wiele -pargumentów:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Tania Ang
źródło
4
Dzięki! Znalazłem to w dokumentacji tutaj: docs.docker.com/userguide/dockerlinks/... gdzie jest napisaneNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young
Czy istnieje sposób na określenie portów w pliku konfiguracyjnym? Na przykład za pomocą opcji --env-file?
Giovanni Bitliner
8
@GiovanniBitliner nadal jestem całkiem nowy w tym, ale jestem pewien, że można zdefiniować porty w Dockerfile z EXPOSE , a następnie wykonać docker run -P(zwróć uwagę na wielkie litery), który automatycznie naraża wszystkie porty zdefiniowane z expose w Dockerfile
Ted Avery
Wiele portów może zatrzymać proces inicjowania w pliku usługi systemowej?
Lanti
1
Myślę, że poprawny termin tutaj publishnie jest expose.
tgogos,
289

Krok 1

W swoim Dockerfilemożesz użyć czasownika, EXPOSEaby ujawnić wiele portów.
na przykład

EXPOSE 3000 80 443 22

Krok 2

Następnie chcesz zbudować nowy obraz na podstawie powyższego Dockerfile.
na przykład

docker build -t foo:tag .

Krok 3

Następnie można użyć -pdo mapowania portu hosta z portu kontenerowego w rozumieniu wyżej EXPOSEod Dockerfile.
na przykład

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

Jeśli chcesz udostępnić szereg ciągłych portów, możesz uruchomić dokera w następujący sposób:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
źródło
17
EKSPOZYCJA to tylko dokumentacja dla portów, które są publikowane i przydatne tylko do łączenia. Pełną listę portów można znaleźć za pomocą opcji -P i zostaną one automatycznie zamapowane na dostępny port na hoście.
Arun Gupta,
4
Ujawnienie nie jest potrzebne. Usuń pierwszy krok lub ustaw go jako opcjonalny.
AmirHossein
27

jeśli używasz docker-compose.ymlpliku:

services:
    varnish:
        ports:
            - 80
            - 6081

Możesz także określić port hosta / sieci

varnish:
    ports:
        - 80:80
        - 6081:6081
Rashidul Islam
źródło
0

Jeśli tworzysz kontener z obrazu i chcesz udostępnić wiele portów (nie publikować), możesz użyć następującego polecenia:

doker utwórz --nazwa container name--wyświetl 7000 --wyświetl 7001image name

Teraz, gdy uruchomisz ten kontener za pomocą docker startpolecenia, skonfigurowane porty powyżej zostaną ujawnione.

PhantomReference
źródło