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}/`);
});
当我 dockerize 这个应用程序并在容器中运行它时,主机名 0.0.0.0 有效,但 127.0.0.1 无效。我理解原因是因为 docker 容器几乎都有自己的 IP。
因此,当我将主机名变量设置为 127.0.0.1,然后在浏览器上访问 127.0.0.1 时构建并运行容器时,我连接的不是容器的 IP 地址,而是我的本地计算机。
但是为什么当我在 0.0.0.0 上运行容器化应用程序并在浏览器上访问 127.0.0.1 时,它现在连接到容器而不是我的本地计算机?
谢谢你。
docker 是“另一台机器”,您的机器在 localhost 上获得了一个端口转发到该机器。
因此,当 docker 内的应用程序侦听仅在该机器内部有效的 127.0.0.1 时,要从“外部”连接到它,您需要侦听该
any
地址。所以有2个不同的
127.0.0.1
。如果您收听
any
(0.0.0.0),那么它也可以在 127.0.0.1 以及机器上的所有其他接口/IP 上使用。