
const hostname = '0.0.0.0'; // << This is where I'm confused
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello World');
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
Cuando dockerizo esta aplicación y la ejecuto en un contenedor, el nombre de host 0.0.0.0 funciona, pero 127.0.0.1 no funciona. Entiendo que la razón es que los contenedores Docker prácticamente obtienen su propia IP.
Entonces, cuando construyo y ejecuto el contenedor, cuando configuro la variable de nombre de host en 127.0.0.1 y luego visito 127.0.0.1 en mi navegador, no me conecto a la dirección IP del contenedor, sino a mi máquina local.
Pero, ¿por qué cuando ejecuto la aplicación en contenedor en 0.0.0.0 y visito 127.0.0.1 en mi navegador, ahora se conecta al contenedor en lugar de a mi máquina local?
Gracias.
Respuesta1
Docker es "una máquina diferente" y su máquina obtiene un puerto reenviado a esa máquina en localhost.
Entonces, cuando la aplicación dentro de la ventana acoplable escucha 127.0.0.1 que solo es válida dentro de esa máquina, para conectarse desde "afuera" necesita escuchar la any
dirección.
Entonces hay 2 diferentes 127.0.0.1
.
Si escucha any
(0.0.0.0), también estará disponible en 127.0.0.1 y en todas las demás interfaces/IP de la máquina.
En estos días debes asegurarte de escuchar ::
cuál es la variante IPv6, pero también debería incluir la v4. Intentar utilizar los estándares actuales reducirá los problemas futuros.