Webserver no contêiner docker não é acessível pela Internet

2

Eu tenho lido: link

Eu criei minha própria rede ( docker network create --driver bridge devils_network ):

441be50f3792        bridge              bridge              local
0d73f7c6fe00        devils_network      bridge              local
8e189dda9fef        host                host                local
5ebca4a1e514        none                null                local

Eu corro o container assim:

docker run -it -d -v ~/dockervolume/deus:/srv/www --name deus --hostname deus --network=devils_network -p 80:8080 karl/node

E no dockerfile exponha a porta 8080:

EXPOSE  8080

Anexei uma sessão de terminal ao contêiner e inspecionei o contêiner para garantir que o servidor da web esteja ativo e funcionando:

root        17  0.0  0.1   4508   660 ?        S    22:46   0:00 sh -c NODE_PATH="$(pwd)" NODE_ENV=production node hello_world
root        19  0.0  4.3 882896 22004 ?        Sl   22:46   0:00 node hello_world

O servidor da web está utilizando a porta 8080 dentro do contêiner docker.

Estou correndo em um droplet DigitalOcean. Se eu iniciar o servidor diretamente no host e não através de um contêiner docker, ele funciona.

    
por Karl Morrison 16.08.2017 / 01:09

2 respostas

0

  1. Você precisa inverter o mapeamento -p 80: 8080 para -p 8080: 80 O primeiro porta está no host e o segundo é o contêiner.
  2. Em sua rede local / de trabalho, certifique-se de redirecionar, em seu roteador / fw, a porta 8080 para a porta do host do docker 8080.

Isso deve funcionar: Aqui estão os mesmos passos que eu fiz com o meu container nginx:

docker network create --driver bridge devils_network
4320854ef67c5489848c1e1f14ffaf4d65183c5e3fac5f655c038bb15aa50df7  

docker run -it -v ~/dockervolume/deus:/usr/share/nginx/html --name deus --hostname deus --network=devils_network -p 8080:80 ajnouri/nginx
root@deus:/# 

Copiado um arquivo index.php em ~ / dockervolume / deus :

E navegou no meu IP público do meu telefone:

    
por 16.08.2017 / 02:45
0

Derp. Eu estava usando o seguinte antes no meu aplicativo Node.js:

const hostname = '127.0.0.1';
const port = 8080;

Eu mudei para:

const hostname = '0.0.0.0';
const port = 8080;

Agora está funcionando. O motivo pelo qual usei 127.0.0.1 é porque estou acostumado a usar um proxy reverso (HAProxy) para lidar com isso. No entanto, quero que o contêiner docker se conecte diretamente à Internet e não passe por um proxy reverso.

    
por 16.08.2017 / 19:02

Tags