Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to run Flask app gives "Address already in use"

Tags:

python

flask

I recently updated my app and tried to run it, and got the following error about "Address already in use". What does this mean and how do I fix it?

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
like image 815
user119264 Avatar asked Dec 24 '15 21:12

user119264


4 Answers

It means there's another service's using that port (8080 in this case). Maybe because you forgot close another running Flask app and it's using 8080 port.

However, you could change the port you're using, for example change it to 4444 like this:

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

But anyways, I think you'd like to know which program is using that part if it's not your program. You could use nmap or netcat GNU program to check it.

Here's the netcat way (from here):

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

When you got it, I'd suggest stop it manually (for example if it's nginx or other HTTP servers, then stop it via service command or systemctl if you're using systemd Linux)

You can also kill it via command kill:

kill <pid>

You can also kill it via killall or pkill, it use a process name instead of it's pid:

killall/pkill <process name>
like image 70
Remi Crystal Avatar answered Nov 10 '22 06:11

Remi Crystal


Try to kill all the other processes which are running on your server using this command

sudo fuser -k xxxx/tcp

replace xxxx with your port name

like image 37
Pratyush Narain Avatar answered Nov 10 '22 06:11

Pratyush Narain


On OSX (12.1)

Run:

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

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

If ControlCe is returned (Apple's Control Center) is running. To turn it OFF go to:

Apple/System Preferences/Sharing/ and turn OFF AirPlay Receiver

like image 40
jono2010 Avatar answered Nov 10 '22 05:11

jono2010


You can get the pid of all running processes having python keyword using the command:

ps -fA | grep python

After getting the pid's use kill command as follows:

kill -9 pid

After running above two commands now run the flask app, it will work fine

like image 22
Prakhar Gupta Avatar answered Nov 10 '22 05:11

Prakhar Gupta