【问题标题】:Flask Google Cloud App Engine: OSError: [Errno 98] Address already in useFlask Google Cloud App Engine:OSError:[Errno 98] 地址已在使用中
【发布时间】:2018-05-04 14:51:33
【问题描述】:

我正在尝试在谷歌云应用引擎上部署一个烧瓶应用。它在我的本地虚拟环境中运行顺利,但在云中运行时出现 502 错误。

现在我正在尝试在云服务器上调试我的代码,使用调试模式和 SSH 进入我的实例。使用docker exec -it [ID] /bin/bash 我可以访问我的应用程序的根目录。现在我在运行python app.py 时收到以下错误:

 * Serving Flask app "app" (lazy loading)
 * Environment: production
   WARNING: Do not use the development server in a production environment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "app.py", line 479, in <module>
    app.run(port=8080)
  File "/usr/local/lib/python3.6/site-packages/flask/app.py", line 941, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 814, in run_simple
    inner()
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 774, in inner
    fd=fd)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 660, in make_server
    passthrough_errors, ssl_context, fd=fd)
  File "/usr/local/lib/python3.6/site-packages/werkzeug/serving.py", line 577, in __init__
    self.address_family), handler)
  File "/usr/local/lib/python3.6/socketserver.py", line 453, in __init__
    self.server_bind()
  File "/usr/local/lib/python3.6/http/server.py", line 136, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "/usr/local/lib/python3.6/socketserver.py", line 467, in server_bind
    self.socket.bind(self.server_address)
OSError: [Errno 98] Address already in use

我一直试图杀死我运行时列出的那些进程:

ps -fA | grep python

但是,这并不能解决地址被使用的问题。更改 app.run() 中的端口也不能解决我的问题。

【问题讨论】:

  • netstap -apn | grep 8080的输出是什么
  • 似乎不起作用,它说:bash: netstap: command not found

标签: python google-app-engine


【解决方案1】:

我遇到了类似的问题,这是由于加载模块时 Flask 应用程序也在运行引起的,因为我有

if __name__ == "__main__":
    app.run()

在底部。请注意,最近将服务器文件命名为“main.py”的要求可能会导致出现此错误。

【讨论】:

    【解决方案2】:

    我认为问题在于您不需要专门针对云计算端口。 Google Cloud 会找到自行运行您的应用的端口。所以不要写app.run(port=8080),而是写app.run()

    【讨论】:

      【解决方案3】:

      虽然我无法弄清楚如何“释放”正在运行的地址,但我通过在 不同的端口上运行另一个烧瓶进程来解决问题,如下所示:

      flask run --port=80
      

      【讨论】:

        猜你喜欢
        • 2011-05-26
        • 1970-01-01
        • 2022-01-18
        • 2021-05-14
        • 2015-06-04
        • 2020-05-18
        相关资源
        最近更新 更多