【问题标题】:local host ip (127.0.0.1) is not working on google-compute-engine本地主机 ip (127.0.0.1) 在 google-compute-engine 上不起作用
【发布时间】:2019-09-02 11:13:33
【问题描述】:

我已经公开了一个 URL (http://127.0.0.1:5000/daily),但在 Google Compute Engine (GCE) 中我没有得到这些值。如果我在简单的python程序中通过请求访问这个URL,它就会高效运行。

import requests
import json
req=requests.get('http://127.0.0.1:5000/daily')

a = json.loads(req.text)

discount_rate = a['data']['policy_rate']
six_months_kibor = a['data']['today_kibor_rate']
dollar_to_pkr= a['data']['today_usd_rate']

print(discount_rate, six_months_kibor, dollar_to_pkr)

我从 GCE 收到的错误是:

urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/adapters.py", line 449, in send
    timeout=timeout
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/urllib3/connectionpool.py", line 641, in urlopen
    _stacktrace=sys.exc_info()[2])
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/urllib3/util/retry.py", line 399, in increment
    raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded with url: /daily (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused',))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 6, in <module>
    req=requests.get('http://127.0.0.1:5000/daily')
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/api.py", line 75, in get
    return request('get', url, params=params, **kwargs)
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/api.py", line 60, in request
    return session.request(method=method, url=url, **kwargs)
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/sessions.py", line 533, in request
    resp = self.send(prep, **send_kwargs)
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/sessions.py", line 646, in send
    r = adapter.send(request, **kwargs)
  File "/home/dev_baseh/.local/lib/python3.5/site-packages/requests/adapters.py", line 516, in send
    raise ConnectionError(e, request=request)
requests.exceptions.ConnectionError: HTTPConnectionPool(host='127.0.0.1', port=5000): Max retries exceeded with url: /daily (Caused by NewConnectionError('<urllib3.connection.HTTPConnection object at 0x7f93526c16a0>: Failed to establish a new connection: [Errno 111] Connection refused', )) 

我不知道为什么它没有在 GCE 上运行。 提前致谢:)

【问题讨论】:

  • 你在哪里暴露了 IP 127.0.0.1 ? 127.0.0.1 只能从与暴露服务器相同的计算机上的其他程序访问。无法从其他计算机访问它。
  • 知道了,我正在使用我的公共 IP 地址,但是如何访问 127.0.0.1:5000/daily/ 上的可用值?
  • 如果您运行自己的本地服务器,那么首先您必须使用 IP 0.0.0.0 而不是 127.0.0.1 运行服务器,因此它将使用计算机中安装的所有网卡 (NIC) 而不是虚拟卡(环回) 和本地网络中的其他计算机将可以访问此服务器。要从 Internet 访问,您必须找到您的外部 IP。它不是您计算机的 IP,而是外部路由器的 IP,它将所有连接重定向到您的计算机。您可以使用显示您的外部 IP 的网页。但通常路由器只重定向普通端口,如 80 而不是 5000,因此最好在本地服务器中使用端口 80。
  • 您也可以使用ngrok 在 Internet 上公开您的本地服务器 - ngrok http 5000 - 它会为您的本地服务器创建随机 URL。如果您想要固定网址,则必须付费。
  • 使用免费版本的 ngrok 是一个问题 - 当您重新启动 ngrok 时,它会创建新的随机 URL。

标签: python python-requests localhost google-compute-engine


【解决方案1】:

IP 地址 127.0.0.1 是指您机器的本地 IP 地址。因此,如果您在运行该服务器的同一台机器上运行 python 程序,它将能够访问该地址,因为两者具有相同的 IP 地址。

当您尝试从 GCP 访问 127.0.0.1 时,发生的情况是 GCP 在本地尝试访问端口 5000,而不是您机器的端口 5000。

您需要找出运行服务器的机器的面向公众的 IP 地址。如果它在您的计算机上,您可以通过 Google 搜索“我的 IP 是什么”并获取它。

【讨论】:

  • 知道了,我正在使用我的公共 IP 地址,但是如何访问 127.0.0.1:5000/daily/ 上的可用值?
  • 您需要进入路由器设置并验证端口 5000 是否正在从您的本地计算机“转发”端口,以便可以从外部访问。
猜你喜欢
  • 2018-07-25
  • 1970-01-01
  • 2020-09-18
  • 2019-01-19
  • 2014-08-19
  • 2023-04-07
  • 2022-01-22
  • 2018-03-19
  • 2016-02-05
相关资源
最近更新 更多