📝

Windows側からWSL側で立ち上げたアプリにアクセスできなかった問題が解決した話

に公開

WSL2上で開発中のアプリケーション(例:Next.jsやBunなど)を起動して 0.0.0.0:3000 でリッスンしていると、WSL内からは curl でアクセスできるのに、Windowsのブラウザから localhost:3000 にアクセスできないことってありませんか?

まさに私もそれに遭遇しました。

結論:ミラーモードで解決しました
最近のWSL2には「mirrored networking(ミラーモード)」という仕組みがあり、これを有効にすることで、WSL内の 0.0.0.0:3000 で立ち上げたアプリがWindows側の localhost:3000 からもアクセス可能になります。

設定も簡単で、以下の .wslconfig を用意するだけ:

[wsl2]
networkingMode=mirrored

保存後に以下でWSLを再起動します。

wsl --shutdown

再度アプリを起動して localhost:3000 にアクセスすれば、今度はちゃんと表示されるはずです。

どうして解決したの?
WSL2は仮想マシンの上に構築されており、従来のネットワーク構成ではWSLとWindows間に明確なネットワークの壁がありました。ミラーモードはこれを吸収して、WSLで開いたポートをWindowsのlocalhostにマッピングしてくれる仕組みです。

補足:もしミラーモードが効かないなら
Windows 11であること(Windows 10では未対応)

最新のWSLがインストールされていること

.wslconfigが正しい場所(%UserProfile%)にあること

このあたりをチェックしてみてください。

Discussion