【问题标题】:Trying to run Flask app gives "Address already in use"尝试运行 Flask 应用程序会给出“地址已在使用中”
【发布时间】:2015-12-24 21:18:17
【问题描述】:

我最近更新了我的应用程序并尝试运行它,并收到以下关于“地址已在使用中”的错误。这是什么意思,我该如何解决?

Traceback (most recent call last):
  File "/home/ubuntu/workspace/app.py", line 11, in <module>
    app.run(host = os.getenv('IP', '0.0.0.0'), port=int(os.getenv('PORT',8080)))
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 772, in run
    run_simple(host, port, self, **options)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 687, in run_simple
    inner()
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 653, in inner
    fd=fd).serve_forever()
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 557, in make_server
    passthrough_errors, ssl_context, fd=fd)
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 467, in __init__
    HTTPServer.__init__(self, (host, int(port)), handler)
  File "/usr/lib/python2.7/SocketServer.py", line 419, in __init__
    self.server_bind()
  File "/usr/lib/python2.7/BaseHTTPServer.py", line 108, in server_bind
    SocketServer.TCPServer.server_bind(self)
  File "/usr/lib/python2.7/SocketServer.py", line 430, in server_bind
    self.socket.bind(self.server_address)
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

【问题讨论】:

  • 这意味着有另一个服务正在使用该端口(在这种情况下为8080)。可能是因为您忘记关闭另一个正在运行的 Flask 应用程序,它正在使用 8080 端口。
  • @KevinGuan 但我只部署了一个烧瓶应用程序:/
  • address already in use 表示服务器无法启动,因为另一个服务器在该端口上运行。检查您的程序是否已经运行,如果已经运行,则终止它。您还可以在 Windows 系统上使用 tcpview 查看活动的 tcp 服务器。
  • @user119264:嗯,你可以使用nmapnetcat 来检查哪个程序正在使用该端口。这是另一个问题,接受的答案是使用netcat,检查一下:unix.stackexchange.com/questions/106561/…
  • 改成 app.run(host=os.getenv('IP',0.0.0.0'),port=int(os.getenv('PORT',5000)))

标签: python flask


【解决方案1】:

这意味着有另一个服务正在使用该端口(在这种情况下为8080)。可能是因为你忘记关闭另一个正在运行的 Flask 应用,它正在使用8080 端口。

但是,您可以更改您正在使用的端口,例如将其更改为 4444,如下所示:

if __name__=="__main__":
    app.run(host=os.getenv('IP', '0.0.0.0'), 
            port=int(os.getenv('PORT', 4444)))

但无论如何,如果不是您的程序,我想您想知道哪个程序正在使用该部分。您可以使用nmapnetcat GNU 程序来检查它。

这是netcat 方式(from here):

$ sudo netstat -nlp | grep 8080
tcp  0  0  0.0.0.0:8080  0.0.0.0:*  LISTEN  125004/nginx

当你得到它时,我建议手动停止它(例如,如果它是 nginx 或其他 HTTP 服务器,然后通过 service 命令或 systemctl 如果你使用 systemd Linux 来停止它)

你也可以通过命令kill杀死它:

kill <pid>

你也可以通过killallpkill杀死它,它使用进程名而不是pid:

killall/pkill <process name>

【讨论】:

  • 哇,谢谢你的帮助!很抱歉再次打扰您,但它显示“TemplateNotFound”,但 index.html 就在我的目录中,正如您在图片中看到的那样:/
  • 这个不错,lsof看不到的竟然都找到了
  • 在这种情况下我可以在 Windows 上做什么?
【解决方案2】:

尝试使用此命令杀死服务器上运行的所有其他进程

sudo fuser -k xxxx/tcp

将 xxxx 替换为您的端口名称

【讨论】:

  • 一个简单的解决方案,无需安装任何东西。谢谢
【解决方案3】:

您可以使用以下命令获取所有正在运行的具有 python 关键字的进程的 pid:

ps -fA | grep 蟒蛇

得到pid后的使用kill命令如下:

杀死 -9 pid

运行上面两个命令后,现在运行flask应用程序,它会正常工作

【讨论】:

  • 我不确定这是否回答了最初的问题?
【解决方案4】:

您可以简单地使用run函数的主机和端口参数来设置另一个主机和端口。这样您就可以测试您的应用程序了。

if __name__=="__main__":
    app.run(host='127.0.0.9',port=4455,debug=True) 

【讨论】:

    【解决方案5】:

    我遇到了同样的问题。

    我列出了所有使用该命令运行的应用程序

    sudo lsof -i -P -n | grep LISTEN
    

    还有另一个应用程序使用相同的端口。

    在我停止另一个应用程序后,我可以启动我的 Flask 应用程序。

    【讨论】:

    • 谢谢! Docker 正在使用此端口运行一些应用程序,但它作为 python 不可见。
    【解决方案6】:

    在 OSX (12.1) 上

    运行:

    sudo lsof -i -P |听听 | grep 5000

    ControlCe  1619        xxx   21u  IPv4 xxx      0t0    TCP *:5000 (LISTEN)
    ControlCe  1619        xxx   22u  IPv6 xxx      0t0    TCP *:5000 (LISTEN)
    

    如果返回 ControlCe(Apple 的控制中心)正在运行。要关闭它,请转到:

    Apple/系统偏好设置/共享/并关闭 AirPlay 接收器

    【讨论】:

    • 这对我来说是个问题
    • ControlCe 正是我的问题。
    【解决方案7】:

    这将杀死端口8080上的所有进程

    kill -9 $(lsof -t -i:"8080")
    

    如果您使用 Ctrl+Z 只是停止进程(暂停)而不是 Ctrl+C 来停止进程,您最终可能会得到一个 open port

    【讨论】:

      【解决方案8】:

      尝试重新启动终端/shell 或您用来运行 python 的任何平台。它对我有用。

      【讨论】:

        【解决方案9】:

        我遇到了同样的问题,但杀死当前进程并没有帮助,因为它会在运行时发生。我在 python 中的 app.run 之前放置了一个带有 bash 脚本的 subprocess.run 以将其杀死,并且它起作用了。

        #!/bin/bash
        
        kill $(lsof -i:5001 -t)
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-06-03
          • 2016-04-20
          • 2021-11-22
          • 2014-08-31
          • 2022-01-08
          • 1970-01-01
          • 1970-01-01
          • 2013-04-29
          相关资源
          最近更新 更多