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

Chr*_* G. 5 docker grpc

我有一个在码头工人容器中运行的grpc-go服务器,正在监听0.0.0.0:8080。我在侦听docker容器localhost127.0.0.1在Docker容器中失败后发现此方法有效-并且它仅在docker容器中运行失败,如果我在同一台机器上运行则不会。

同样,一个简单的Web服务器也可以在localhost或127.0.0.1上侦听。

我发现0.0.0.0正在任何网络适配器上进行监听-但没有找到其他解释。

好了,问题解决了-但是我正在寻找一个解释-您知道吗?

BMi*_*tch 5

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

从更高的层次考虑,只能从该主机实现主机上的环回,您不能从其他主机或外部负载均衡器访问它。命名空间网络的工作原理非常相似。相同网络名称空间中的其他进程可以到达容器内的环回,但其他名称空间中的容器则不能访问环回,并且不能从具有端口转发功能的主机访问,因为它转发到虚拟网络接口,类似于外部负载平衡器转发到虚拟网络接口的方式。主机网络接口。