Oi! as imagens e o Dockerfile ajudam bastante a entender o problema.
O seu container realmente está “rodando”, mas há um detalhe na configuração que impede o acesso via navegador. Vamos destrinchar:
No seu Dockerfile, você define:
ARG PORT_BUILD=6000
ENV PORT=$PORT_BUILD
EXPOSE $PORT_BUILD
Isso significa que o container está preparado para escutar a porta 6000.
No log do docker ps, o container que expõe 8080 mostra o mapeamento:
0.0.0.0:6000->8080/tcp
Ou seja, a porta 6000 do container está mapeada para a 8080 da máquina host.
Isso indica que o container está servindo algo na porta 6000, não 8080.
Seu código Node faz:
app.listen(process.env.PORT, ()=>{ console.log("Server is listening on port 3000") })
Aqui está o principal problema:
- O Express está ouvindo
process.env.PORT, que é 6000 (certo) - Mas o
console.log mostra “port 3000”, o que pode confundir — ele não está ouvindo 3000. - Como o mapeamento é
8080 -> 6000, você deve acessar localhost:8080.
Contudo, se ainda assim não abre no navegador, é provável que o app esteja escutando apenas em localhost dentro do container (e não em todas as interfaces).
Como corrigir
Abra seu código JS e altere o app.listen assim:
app.listen(process.env.PORT, '0.0.0.0', () => {
console.log(`Server is listening on port ${process.env.PORT}`);
});
Isso faz o Express aceitar conexões externas — o que é necessário dentro de um container Docker.
Reconstrua a imagem:
docker build -t app-node:1.6 .
Rode o container mapeando corretamente:
docker run -p 8080:6000 app-node:1.6
Acesse no navegador:
http://localhost:8080
Se ainda não funcionar, me envie a saída completa de:
docker logs <nome-do-container>
Assim posso confirmar se o servidor subiu corretamente dentro do container.