Servidor de nodo en contenedor inaccesible con server.listen(puerto, ‘127.0.0.1’)

Configuré un servidor Node simple en Docker.

Dockerfile

FROM node:latest
RUN apt-get -y update
ADD example.js .
EXPOSE 1337   
CMD node example.js

ejemplo.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello Worldn'+new Date);
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Ahora construye la imagen

$ docker build -t node_server .

Ahora ejecutar en contenedor

$ docker run -p 1337:1337 -d node_server  
$ 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70

Compruebe que el contenedor se está ejecutando y que los puertos están asignados:

$ docker ps  

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                    NAMES
5909e87302ab        node_server         "/bin/sh -c 'node exa"   7 seconds ago       Up 6 seconds        0.0.0.0:1337->1337/tcp   grave_goldberg

Ahora vamos a adjuntar al contenedor y verificar que el servidor se está ejecutando dentro:

$ docker exec -it 5909e87302ab7520884060437e19ef543ffafc568419c04630abffe6ff731f70 /bin/bash 

Y en el tipo de línea de comandos del contenedor:

[email protected]:/# curl http://localhost:1337
Hello World
Mon Feb 15 2016 16:28:38 GMT+0000 (UTC)

Se ve bien, ¿verdad?

El problema

Cuando ejecuto el mismo comando curl en el host (o navego con mi navegador para http://localhost:1337) no veo nada.

¿Alguna idea de por qué la asignación de puertos entre el contenedor y el host no funciona?

Cosas que ya probé:

  • Correr con la bandera--expose 1337
Respuestas:2 Respuestas 2
Tiempo:hace 6 años, 7 meses
Última modificación:hace 1 año, 8 meses

Solución

Los puertos se exponen correctamente, pero el servidor escucha las conexiones dentro del contenedor:127.0.0.1

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello Worldn'+new Date);
}).listen(1337, '127.0.0.1');

Debe ejecutar su servidor de esta manera:

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end('Hello Worldn'+new Date);
}).listen(1337, '0.0.0.0');

Tenga en cuenta el 0.0.0.0 en lugar de 127.0.0.1.

Otras respuestas

Deja un comentario