WSL 2 に mysql や apache を入れて Windows のプログラムから接続したくなることがあります。さてどうしましょうか。
build 18950 以上であれば localhost 指定で OK
Windows 10 build 18950 以上であれば Windows のループバックアドレス (localhost) のポートから自動的に Linux マシンにポートフォワードしてくれます。ですので Linux で Apache を動かして Windows のブラウザから http://localhost/ と指定してアクセスすることができます。
参考記事: https://www.atmarkit.co.jp/ait/articles/1909/09/news020.html
生のアドレスでアクセスしたい時もある
ただ、Web アプリ関連でリダイレクト等が絡むと localhost を使った URL では動かないケースがあるようです。私もそのあたりが原因でハマりかけたので開発時は Linux マシンのアドレスを使ってアクセスしています。ここで困るのが Linux マシンの IP アドレスを固定できないことです。調べた限りでは方法がなさそうです。
そこで策として考えられるのが、Windows の hosts ファイルを Linux マシン起動後に更新してホスト名を固定する方法です。世の中にはこれを Windows サービス化された方がいらっしゃいます。
https://github.com/shayne/go-wsl2-host
私の場合はこれだけのためにサービスを増やすのも大ごとのように感じてしまい、以下のような簡単なスクリプトを作って WSL 起動後に Windows 管理者権限で実行しています。元々 hosts ファイルはいじっておらず空のままだったので完全に置き換える動作にしていますが、ちょっと変えれば静的レコード+動的レコードみたいな使い方もできると思います。ご参考まで。
Linux 側 IP アドレス表示スクリプト
$ cat /usr/local/bin/genhosts
#!/bin/sh
IP_ADDR=hostname -I
while read -r line; do
echo $IP_ADDR $line
done < /usr/local/etc/wslhosts
Windows 側から参照したいホスト名を記述するファイル
hetarena.com 開発環境の例ですw
$ cat /usr/local/etc/wslhosts hetarena-dev.com en.hetarena-dev.com ura.hetarena-dev.com
Windows 側スクリプトファイル
以下の内容の .cmd ファイルを作って WSL 起動後に管理者権限で実行します。
wsl.exe genhosts > C:\Windows\System32\drivers\etc\hosts
すると以下のような hosts ファイルが生成されます。
172.27.43.123 hetarena-dev.com 172.27.43.123 en.hetarena-dev.com 172.27.43.123 ura.hetarena-dev.com
これで Windows ブラウザから http://hetarena-dev.com を参照したりすることができます。
その他
- WSL 2 のファイルシステムを参照したいときは ‘\\WSL$\’ を Explorer から開けばよいですね。
- 逆に Linux から Windows を参照する場合は “ホスト名.mshome.net” というホスト名が使用できます。
関連情報: WSL2 Set static ip?
https://github.com/microsoft/WSL/issues/4210