【Node.js】listen EACCES: permission deniedはWindows Updateを疑え!

こんにちは。

当サイトはNuxt.jsを使って開発していますが、ある日突然ローカルの開発環境でエラーが出てNuxtが起動できなくなりました。今回はそのエラーはWindows Updateが原因だったという話です。

Nuxtが突然起動できなくなる

当サイトはNuxt.jsを使って開発しており、ローカルの開発環境はDockerなどは特に使わずVSCodeのターミナル(PowerShell)上からnuxtコマンドで起動する形になっています。

今日もいつものようにローカルでプログラムを立ち上げようとしたところ、エラーが出て起動しませんでした。その内容が以下のものです。

Error: listen EACCES: permission denied 127.0.0.1:50XXX
  at Server.setupListenHandle [as _listen2] (net.js:1253:19)

エラー文を記録していなかったので127.0.0.1のところはlocalhostだったかもとか実際エラーになっている行は違うかもとか正確ではない部分はあるかもしれませんが、listen EACCES: permission deniedというエラーが出ました。またポート番号はなんとなく50000台を使っていて細かい番号は省略しています。

ポートが既に使われている

エラー内容は簡単に言うと、Node.jsプログラムの起動時にlocalhostの50XXX番ポートで起動する権限が無いということです。sudoコマンドで起動すれば回避できるよ!みたいな情報も見ましたが、それってどうなんだ・・・というのとそもそもWindowsだし・・・というのがあり、今回はその問題とは違う問題な気がしたのでもっと根本的な原因を探しました。

というのも、これまで普通に起動できていたポート番号だからです。50000台というのは自由に利用できるポート番号の中に含まれており、他のプログラムと重複の可能性はあるものの特に新しく何かを導入したということも無かったので、そのあたりを怪しんでいました。

そしてググりまくった結果たどり着いた解決方法が以下です。

Windows Updateが原因だった!

この質問者はExpressを使ったNode.jsのプログラムが同様のエラーで起動していません。「sudoを使え」という解決法ばかりでWindowsには合わないしどうしたらいいか分からない、という質問です。

私の役に立った回答はこちらの部分です。

For me this is constantly happening when Windows 10 has some pending updates. To fix this i need to install all pending updates and reboot 1-2 times during the process.

つまり、再起動待ち状態のWindows Update(更新プログラム)がある状態でたまに起こる現象で、再起動して更新プログラムを反映すれば解消する、ということです。

私はパソコンは基本的に24時間付けっぱなしにしています。Twitterの監視のためタイムラインが流れないようにしたいのと、定期実行プログラムを動かしているからです。そのためWindows Updateの再起動が自動で走らないような設定にしており、更新プログラムがあることを認識しつつもいつも先延ばしにしています。そのリスクが今回思わぬ形で顕在化したというわけですが、更新プログラムがあるだけでずっとポートが占有されることがあるんですね。

よくあることなのだろうか

当サイトでは50000台のポート番号で複数のプログラムを実行していますが、Windows Updateが原因の今回の事象に遭遇したのはこれが初めてでした。Windows Updateによってこういった妨害が起きることがよくあることなのかちょっと調べてみました。

とあるプロジェクトのIssueですがこんなものがありました。Windows Updateによってこれまで使えていたポートが使えなくなった、というものです。これはアップデートをインストール後の話かもしれませんが、2019年のIssueなのでOSによって特定番号のポートがブロックされるのはよくあることなのかもしれないですね。

この問題の解決策はポート番号を変えることだということで、サーバー上でも同じポート番号で動かしているのでちょっと面倒ですね。今後を考えるとローカルとサーバーでポート番号を分けられるようにしておいたほうがいいかもしれません。というか早くサイトリニューアルを進めたい(激重なので)。


というわけで今回は、Nuxt.jsプログラムが急に起動できなくなったのは待機中のWindows Updateがあったからだったという話でした。

こういう問題にぶち当たって時間を使うたびに思いますが、ググり力、大事ですよね・・・。

それではまた。

関連記事