MacをMontereyにアップデートしたらFlaskが5000番ポートで起動できなくなった

Flaskではデフォルトでは5000番ポートで開発サーバが起動する。

自分はとあるアプリの開発で普段、Flaskで開発したとあるアプリをMac上で起動しているんだけどこれがある日うまく動かなくなった。アプリケーション的になにかをいじったわけではなく、ぱっと思いつく心あたりはない。

ターミナルからMacで使用されているポートを確認したら確かに5000番が何かに使われている(IPとかユーザ名だけマスクした)。

% lsof -i:5000
COMMAND   PID      USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
ControlCe 490 xxxxxxx   22u  IPv4 0xf8bcd361exxxxxxxx      0t0  TCP *:commplex-main (LISTEN)
ControlCe 490 xxxxxxx   23u  IPv6 0xf8bcd36xxxxxxxxx     0t0  TCP *:commplex-main (LISTEN)

とはいえ何もいじってないのに急に動かなくなるなんてことはハードウェア的なものでもなければそうそうおきない。大抵こういうときは何もしていないつもりで何かしたことが原因だって僕は知ってる。

じゃあ、最近何をしたか?

そう、Mac OSのアップデートだ。つい2, 3日前に最新のMontereyにアップデートしたばかりだった。

というわけでその辺を調べてみたところドンピシャだった。

Montereyの新機能の一つにAirPlayのレシーバーになれるというものがある。これが原因だった。AirPlayのレシーバーになれるという話自体はこちらの記事などを参照してほしい。

news.mynavi.jp

これが5000番ポートを使ってListenするようになったのだ。

そんなわけなので結論から言うとFlaskで起動するポートを5000番以外にするか、この機能を停止すればいい。

この機能を停止するのは以下のように、Sharing設定からAirPlay Receiverのチェックを外してOFFにするだけ。

f:id:Keisuke69:20211029011917p:plain

僕はFlaskが利用するポートを変えるのは都合により影響大きくちょっと手間なのでAirPlayレシーバーをオフにする方を選択した。

いやー、良かった。ちょっと切羽詰まってたので焦った。

余談だが、僕の場合はDocker ContainerとRemote Containersで開発している。当然ながらこのFlaskのアプリもコンテナ上で動かしている。なので実際にはこのFlaskのアプリも起動自体はできる。コンテナの中なので。

で、普段はそのコンテナ内で起動したプロセスが利用するポートにMac側からアクセスできるようにポートのフォワード設定をして動かしている。この設定がなぜか5000番ポートのフォワード設定が有効にならなくなったことに気づいたので今回の問題に気づけた。そこに気づけなかったらきっと今も原因不明で途方にくれてたと思う。

©Keisuke Nishitani, 2020   プライバシーポリシー