我有一些关于数字海洋和谷歌云的IP的问题,我对IP和网络知之甚少,我有两个应用程序,一个运行在DigitalOcean服务器(dropplet)上,另一个运行在谷歌云的VM实例上,我试图在每个服务器上设置代码服务器。
在DigitalOcean的droplet中,我成功地配置了代码服务器,当我运行命令code-server code server get online时,地址是:http://127.0.0.1:8080,所以我无法进入应用程序,因为它是droplet的本地IP,所以我无法在浏览器上写入该IP,原因很明显,我做了一些研究,找到了代码服务器的标志--bind-addr,然后我尝试了以下命令:code-server --bind-addr=192.231.24.04:8080 (该IP是一个IP示例),它起作用了,我能够访问编写在我的导航器http://192.231.24.04:8080中的代码服务器,也可以使用mydomain.com:8080访问
在谷歌云中,我尝试做同样的事情,但我做不到,我在虚拟机实例上成功地配置了代码服务器,当我运行code-server代码服务器时,上线的地址是:http://127.0.0.1:8080 (就像在DigitalOcean中一样)显然,这是虚拟机实例的本地IP,然后我继续做我在DigitalOcean中做的相同的事情,使用---bind-addr标志,所以我在控制台上写了这个:code-server --bind-addr=104.652.18.64:8080 (那个IP是一个IP示例),控制台放这个:error listen EADDRNOTAVAIL: address not available 104.652.18.64:8080,我认为谷歌云阻塞了端口8080,所以我解锁了它。但是仍然不起作用,我做了一些研究,我发现我必须使用IP 0.0.0.0:8080,所以我写了这个命令:code-server --bind-addr=0.0.0.0:8080和我尝试使用http://104.652.18.64:8080访问我的浏览器,它工作了……我不知道为什么,我也试过使用myseconddomain.com:8080,也可以工作
所以我不知道有什么区别,IP 0.0.0.0是什么意思?
我返回到DigitalOcean droplet,我试着做同样的事情,我写道:code-server --bind-addr=0.0.0.0:8080,在数字海洋中,droplet说:error listen EADDRINUSE: address already in use 0.0.0.0:8080
所以..。有什么关系呢?
为什么DigitalOcean以谷歌云不工作的方式工作,而谷歌云以DigitalOcean不工作的方式工作?
感谢您的回复
发布于 2020-07-18 19:38:46
谷歌云的网络与internal and external IP addresses有所不同。具体地说,GCE VM实际上不会有具有外部可见IP地址的接口。相反,Google Cloud Networking将透明地从外部IP地址路由到内部IP地址,假设该端口的防火墙允许这样的路由。因此,当您尝试启动专门监听外部IP地址的代码服务器时,VM不知道它指的是什么,因为该接口在VM内部不存在。
通常在主机上(在给定接口上启动服务的上下文中),为0.0.0.0 refers to any/all of the IP addresses on the machine。在您的例子中,这意味着您已经启动了监听内部IP地址的代码服务器,并且由于您已经删除了GCP防火墙中的8080块,因此GCP网络将把对外部地址的请求路由到VM。
我不确定DigitalOcean,但我假设它们没有不同的内部和外部IP地址,因此当您启动代码服务器直接侦听外部IP地址时,它会附加到正确的地址。尝试0.0.0.0时出现的错误表明端口8080上已经有其他东西在侦听。检查您是否首先停止了所有先前的代码服务器进程,以及可能正在监听任何IP上的8080的任何其他进程。
https://stackoverflow.com/questions/62962042
复制相似问题