📝
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