##現象
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の起動時に指定しているのでコードを確認する。
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
以上