尝试运行flask应用程序会给出“地址已在使用中”

ujv3wf0j  于 2021-09-08  发布在  Java
关注(0)|答案(7)|浏览(271)

我最近更新了我的应用程序并尝试运行它,但出现了以下关于“地址已在使用”的错误。这意味着什么?我如何修复它?

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
72qzrwbm

72qzrwbm1#

这意味着有另一个服务正在使用该端口( 8080 在这种情况下)。可能是因为你忘了关闭另一个running 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 路(从这里):

$ 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>
fjnneemd

fjnneemd2#

尝试使用此命令终止服务器上运行的所有其他进程
sudo定影器-k x/tcp
将x替换为您的端口名

zpjtge22

zpjtge223#

您可以使用以下命令获取具有python关键字的所有运行进程的pid:
ps-fa | grep python
获取pid的use kill命令后,如下所示:
杀死-9 pid
运行以上两个命令后,现在运行flask应用程序,它将正常工作

bf1o4zei

bf1o4zei4#

您只需使用run函数的host和port参数设置另一个主机和端口,就可以测试您的应用程序。

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

vtwuwzda5#

我也有同样的问题。
我列出了使用该命令运行的所有应用程序

sudo lsof -i -P -n | grep LISTEN

还有另一个应用程序使用相同的端口。
在我停止另一个应用程序后,我可以启动我的 flask 应用程序。

o2rvlv0m

o2rvlv0m6#

尝试重新启动terminal/shell或运行python所使用的任何平台。这对我有用。

g6ll5ycj

g6ll5ycj7#

这将终止端口上的所有进程 8080 ```
kill -9 $(lsof -t -i:"8080")

如果您正在使用 `Ctrl+Z` 它只是停止进程(暂停),而不是 `Ctrl+C` 若要停止此过程,您可能会以 `open port` .

相关问题