为什么0.0.0.0可以工作而localhost或127.0.01不能工作

时间:2019-05-18 10:12:04

标签: docker grpc

我有一个运行在docker容器中的grpc-go服务器,在0.0.0.0:8080上监听。在侦听docker容器中的localhost127.0.0.1失败后,我发现它可以正常工作-它只能在docker容器中运行失败,如果我在同一台机器上运行则不会。

另外,一个简单的Web服务器确实可以在localhost或127.0.0.1上侦听。

我发现0.0.0.0正在侦听任何网络适配器-但没有其他解释。

好,问题解决了-但是我在寻找解释-你知道吗?

2 个答案:

答案 0 :(得分:3)

网络是docker中的命名空间之一,类似于pid和文件系统命名空间。如果您在容器内杀死pid 1,则这将杀死容器内的进程,而不是在主机上终止systemd / init(只要您不覆盖名称空间)。而且,如果您rm -rf /bin位于容器中,则会从该容器中删除文件,而不是从主机中删除文件(只要您没有卷挂载)。同样,名称空间中的回送网络(localhost或127.0 0.1)仅引用该名称空间,而不是主机。

从更高级别考虑,只能从该主机访问主机上的环回,而不能从其他主机或外部负载平衡器访问它。命名空间网络的工作原理非常相似。同一网络名称空间中的其他进程可以到达容器内的环回,但其他名称空间中的容器则不能,并且不通过端口转发来自主机,因为它转发到虚拟网络接口,类似于外部负载平衡器如何转发到虚拟网络接口。主机网络接口。

答案 1 :(得分:1)

这可能是浏览器缓存造成的!

就我而言,我在配置 .htaccess 文件时遇到了一些错误,该文件进行了 301 重定向。因为我对 localhost127.0.0.1 进行了测试,所以它们不再起作用。 当我用 curl 测试它们时,我发现它只是一个浏览器缓存。