Se quando quando executamos o docker run, indicamos o de/para da porta que precisamos, por que precisamos colocar o EXPOSE 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 ?
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!
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!