LoginSignup
7
5

More than 3 years have passed since last update.

Flaskでエラー OSError: [Errno 98] Address already in use

Posted at

現象

Flaskアプリケーションを作成中、サーバーを起動したまま何度もモジュールを修正していると、標題のエラーが発生した。

エラーメッセージ

OSError: [Errno 98] Address already in use

メッセージのままだけど、「利用しようとしているアドレスはすでにほかで使ってるから今は使えないよ」ということらしい。
こういう場合はポートが埋まってるんだろうと当たりをつけてエラーメッセージを検索する。

検索した結果以下の記事がでヒットした。
https://qiita.com/ringCurrent/items/2413c795372baa7b479d

エラー番号が「48」と「98」で違うけど、おそらく環境差異なので気にせず解決方法を実行していく。

1.「lsof」コマンドのインストール
lsofコマンドで使用中のポートを確認するらしいが、使用しているdocker環境には入ってないみたい。

(base) root@e8cf64ce12e9:/home/continuumio# lsof -i :5000
bash: lsof: command not found

さくっとインストールする。(OSがubuntuなのでaptを使用)

(base) root@e8cf64ce12e9:/home/continuumio# apt install lsof
Reading package lists... Done

2.重複しているポートの確認
重複して利用しているポートを確認する。対象のポートはFlaskの起動時に指定しているのでコードを確認する。

main.py
if __name__ == "__main__":
    app.run(host='0.0.0.0', port=5000, debug=True)

lsofコマンドでポート5000を使っているプロセスを確認
(-i オプションで対象を限定しないと大量に抽出されるため注意)

(base) root@e8cf64ce12e9:/home/continuumio# lsof -i :5000
COMMAND PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python  881 root    4u  IPv4 237229      0t0  TCP *:5000 (LISTEN)
python  901 root    4u  IPv4 237229      0t0  TCP *:5000 (LISTEN)
python  901 root    5u  IPv4 237229      0t0  TCP *:5000 (LISTEN)

3.抽出された一覧から不要なプロセスを終了させる。

  • kill 終了コマンド。物騒な名前。
  • -9 強制終了
  • :xxxx ポート番号

詳細は「man コマンド」で確認

(base) root@e8cf64ce12e9:/home/continuumio# kill -9 901

以上

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5