我有一个运行在docker容器中的grpc-go服务器,在0.0.0.0:8080
上监听。在侦听docker容器中的localhost
或127.0.0.1
失败后,我发现它可以正常工作-它只能在docker容器中运行失败,如果我在同一台机器上运行则不会。>
另外,一个简单的Web服务器确实可以在localhost或127.0.0.1上侦听。
我发现0.0.0.0
正在侦听任何网络适配器-但没有其他解释。
好,问题解决了-但是我在寻找解释-你知道吗?
答案 0 :(得分:3)
网络是docker中的命名空间之一,类似于pid和文件系统命名空间。如果您在容器内杀死pid 1,则这将杀死容器内的进程,而不是在主机上终止systemd / init(只要您不覆盖名称空间)。而且,如果您rm -rf /bin
位于容器中,则会从该容器中删除文件,而不是从主机中删除文件(只要您没有卷挂载)。同样,名称空间中的回送网络(localhost或127.0 0.1)仅引用该名称空间,而不是主机。
从更高级别考虑,只能从该主机访问主机上的环回,而不能从其他主机或外部负载平衡器访问它。命名空间网络的工作原理非常相似。同一网络名称空间中的其他进程可以到达容器内的环回,但其他名称空间中的容器则不能,并且不通过端口转发来自主机,因为它转发到虚拟网络接口,类似于外部负载平衡器如何转发到虚拟网络接口。主机网络接口。
答案 1 :(得分:1)
这可能是浏览器缓存造成的!
就我而言,我在配置 .htaccess 文件时遇到了一些错误,该文件进行了 301 重定向。因为我对 localhost
和 127.0.0.1
进行了测试,所以它们不再起作用。
当我用 curl
测试它们时,我发现它只是一个浏览器缓存。