Como posso expor mais de uma porta com o Docker?

Respostas:

716

Para expor apenas uma porta, é isso que você precisa fazer:

docker run -p <host_port>:<container_port>

Para expor várias portas, basta fornecer vários -pargumentos:

docker run -p <host_port1>:<container_port1> -p <host_port2>:<container_port2>
Tania Ang
fonte
4
Obrigado! Encontrei isso nos documentos aqui: docs.docker.com/userguide/dockerlinks/… onde dizNote: The -p flag can be used multiple times to configure multiple ports.
Ted M. Young
Existe uma maneira de especificar as portas em um arquivo de configuração? Por exemplo, usando a opção --env-file?
Giovanni Bitliner
8
@GiovanniBitliner eu ainda sou muito novo para isso, mas eu tenho certeza que você iria definir portas em um Dockerfile com EXPOR , em seguida, executar docker run -P(note a maiúscula) que expõe automaticamente todas as portas definidas com EXPOR na Dockerfile
Ted Avery
Várias portas podem interromper o processo init em um arquivo de serviço systemd?
Lanti 01/07/2015
1
Eu acho que o termo correto aqui publishnão é expose.
tgogos
290

Passo 1

No seu Dockerfile, você pode usar o verbo EXPOSEpara expor várias portas.
por exemplo

EXPOSE 3000 80 443 22

Passo 2

Você gostaria de criar uma nova imagem com base acima Dockerfile.
por exemplo

docker build -t foo:tag .

Etapa 3

Então você pode usar a -pmapear porta do host com o porto de contentores, conforme definido na acima EXPOSEde Dockerfile.
por exemplo

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

Caso você queira expor uma variedade de portas contínuas, execute o docker da seguinte maneira:

docker run -it -p 7100-7120:7100-7120/tcp 
mainframer
fonte
17
EXPOSE é apenas documentação para as portas publicadas e útil apenas para vinculação. Uma lista completa de portas pode ser encontrada usando -P e elas serão automaticamente mapeadas para uma porta disponível no host.
Arun Gupta
4
A exposição não é necessária. Remova a primeira etapa ou torne-a opcional.
AmirHossein
27

se você usar docker-compose.yml arquivo:

services:
    varnish:
        ports:
            - 80
            - 6081

Você também pode especificar a porta do host / rede

varnish:
    ports:
        - 80:80
        - 6081:6081
Rashidul Islam
fonte
0

Se você estiver criando um contêiner a partir de uma imagem e quiser expor várias portas (não publicar), poderá usar o seguinte comando:

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

Agora, quando você inicia este contêiner usando o docker startcomando, as portas configuradas acima serão expostas.

PhantomReference
fonte