首页 > 解决方案 > 为什么我的烧瓶服务器不会绑定我的 IP 地址?

问题描述

我尝试从 localhost、0.0.0.0 和我的 ipv4 地址运行。当我使用 localhost 时,我无法从另一台计算机访问我的服务器。当我使用 0.0.0.0 时,我遇到了同样的问题,当我使用我的公共 ipv4 地址时,它抛出了一个错误。

我的代码:

from flask import Flask

app = Flask(__name__)

@app.route("/")
def hello():
        return "Hello World!"

if __name__ == "__main__":
    app.run(host="[my ip address]")

我的错误:

 * Serving Flask app "hello" (lazy loading)
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "hello.py", line 14, in <module>
    app.run(host="[my ip address]")
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/flask/app.py", line 990, in run
    run_simple(host, port, self, **options)
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1052, in run_simple
    inner()
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 1005, in inner
    fd=fd,
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 848, in make_server
    host, port, app, request_handler, passthrough_errors, ssl_context, fd=fd
  File "/home/boomerhackr/.local/lib/python3.6/site-packages/werkzeug/serving.py", line 740, in __init__
    HTTPServer.__init__(self, server_address, handler)
  File "/usr/lib/python3.6/socketserver.py", line 456, in __init__
    self.server_bind()
  File "/usr/lib/python3.6/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/lib/python3.6/socketserver.py", line 470, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 99] Cannot assign requested address

为了找到我的 IP 地址,我使用了 bash 命令curl ifconfig.me

我的操作系统:

NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"

这是 Ubuntu 的问题,还是我的代码的问题?

标签: pythonlinuxflask

解决方案


解决这个问题的最佳方法是拥有以下内容:

app.run(host='0.0.0.0', port='8000')可以根据方便更改端口的位置。

当您app.run不带任何参数使用时,它默认将主机作为 127.0.0.1 它绑定到您的本地系统。在这种状态下,您的应用程序无法通过 LAN 或 WAN(公共地址)通过任何其他系统连接

当您使用 0.0.0.0 运行它时,它既可以通过 LAN 也可以通过 WAN 访问。要在 Ubuntu 中获取 LAN 地址,您可以简单地运行hostname -I,如前所述,对于 WAN 地址,您可以使用curl ifconfig.me. 因此,您可以通过使用从同一 LAN 上的另一个系统访问您的应用程序LAN_IP:PORT

现在,大多数 ISP 不提供静态 IP,您不能在 Internet 上公开您的 WAN IP。但是,当您在 VPS 上运行应用程序时,0.0.0.0您可以直接使用服务器的 WAN IP 并进行连接。

127.0.0.1供您参考,和之间的区别0.0.0.0可以在这里找到


推荐阅读