Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Qual a necessidade de expor a porta no Dockerfile?

Se quando quando executamos o docker run, indicamos o de/para da porta que precisamos, por que precisamos colocar o EXPOSE no Dockerfile ?

4 respostas

Julio, tudo bem ?

É só uma questão para facilitar a nossa vida e deixarmos mapeado caso esquecermos algum dia.

Olá, Julio.

Nem sempre iremos fazer o reencaminhamento das portas quando criamos um container (docker run). Pode ocorrer a situação onde você apenas quer executar algum serviço dentro do container e se comunicar com esse serviço diretamente lá dentro do container.

Por exemplo, a imagem do Elasticsearch que se encontra no Dockerhub foi criada com um Dockerfile que expõe as portas 9200 e 9300 (EXPOSE 9200 9300 dentro do Dockerfile, no caso).

É possível subir esse container com Elasticsearch e utilizar esse serviço me comunicando diretamente com o container.

Encontro o ip do container (docker inspect ) e me conecto com o Elasticsearch diretamente do meu navegador utilizando respectivo endereço ip e porta. Vamos supor que o endereço ip do meu container do elastisearch é 172.17.0.2.

Logo, posso me conectar com o serviço em meu navegador através do endereço 172.17.0.2:9200 sem a necessidade de reencaminhar um porta do meu host para uma porta lá dentro do container.

E outra utilidade da exposição das portas no dockerfile é para quando os containers precisar se comunicar entre si.

Abs

Oi, Julio

Uma caracteristica do bridge driver é que a comunicação é apenas entre containers. Pra deixar eles abertos para acesso externo, é necessário publicar (-p) as portas.

Sobre o EXPOSE, a documentação deixa claro que é opcional:

You expose ports using the EXPOSE keyword in the Dockerfile or the --expose flag to docker run. Exposing ports is a way of documenting which ports are used, but does not actually map or open any ports. Exposing ports is optional.

https://docs.docker.com/engine/userguide/networking/#exposing-and-publishing-ports

Abraços!

solução!

Oi Julio,

Espero ter solucionado sua dúvida! Vou fechar esse tópico mas fique a vontade para abrir outro, se ainda precisar.

Abraços!