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}/`);
});
Run Code Online (Sandbox Code Playgroud)
当我对这个应用程序进行 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 是“另一台机器”,您的机器在本地主机上获得转发到该机器的端口。
因此,当 docker 内的应用程序侦听仅在该机器内部有效的 127.0.0.1 时,要从“外部”连接到它,您需要侦听该any
地址。
所以有2个不同的127.0.0.1
。
如果您监听any
(0.0.0.0),那么它也可以在 127.0.0.1 以及计算机上的所有其他接口/IP 上使用。
如今,您应该确保收听::
哪个是 IPv6 变体,但它还应该包括 v4。尝试使用当前标准将减少未来的问题。
归档时间: |
|
查看次数: |
5480 次 |
最近记录: |