Oi, Furlani!
O mapeamento de portas no Docker pode, sim, ser feito de maneira flexível, mas há algumas nuances a serem consideradas.
Quando você usa a opção -p
no Docker, você está mapeando uma porta do host para uma porta do container. A sintaxe é -p <porta_host>:<porta_container>
. No seu exemplo, o container aludocker/alura-books
expõe a porta 3000. Isso significa que dentro do container, a aplicação está ouvindo na porta 3000.
Se você faz -p 3000:8080
, você está dizendo ao Docker para mapear a porta 3000 do host para a porta 8080 do container. Isso não vai funcionar porque a aplicação dentro do container está ouvindo na porta 3000, não na 8080.
O correto seria -p 3000:3000
, onde você está mapeando a porta 3000 do host diretamente para a porta 3000 do container. Dessa forma, quando você acessa a porta 3000 no seu host, o Docker redireciona o tráfego para a porta 3000 dentro do container, onde a aplicação está ouvindo.
Então, não é exatamente uma regra fixa, mas sim uma questão de entender quais portas estão sendo usadas pelo container e mapeá-las corretamente no host. Aqui está um exemplo prático:
docker run -d -p 3000:3000 aludocker/alura-books
Isso deve funcionar, pois você está mapeando a porta 3000 do host para a porta 3000 do container, onde a aplicação está rodando.
Bons estudos!