Open2
WSL2のポートをWindowsホストのフォワーディング
WSL2は動的にIPアドレスを割り当てられるため、ポートフォワーディングを自動化するスクリプトを設定します。以下の手順を実行:
- PowerShellスクリプトを作成
param(
[Parameter(Mandatory=$false)]
[int[]]$Ports = @(8080) # デフォルトは8888、複数ポート指定可能
)
$wslAddress = bash.exe -c "ip addr show eth0 | grep -oP '(?<=inet\s)\d+(\.\d+){3}'"
foreach ($port in $Ports) {
Write-Host "Setting up port forwarding for port $port..."
netsh interface portproxy delete v4tov4 listenport=$port listenaddress=0.0.0.0
netsh interface portproxy add v4tov4 listenport=$port listenaddress=0.0.0.0 connectport=$port connectaddress=$wslAddress
Write-Host "Port $port forwarded to WSL address $wslAddress"
}
使用方法
- スクリプトの実行: PowerShellを管理者権限で起動し、スクリプトを実行:
.\script.ps1 -Ports 3000
.\script.ps1 -Ports 8080,3000,5000
.\script.ps1
Windows ファイアウォールの設定
外部PCからホストPCのポート(例: 8080)にアクセスできるように、Windowsファイアウォールで該当ポートを許可する。
- ファイアウォールルールの追加:
netsh advfirewall firewall add rule name="Allow Web Server Port 8080" dir=in action=allow protocol=TCP localport=8080
-
確認
ファイアウォール設定が正しいことを確認するため、別のPCからホストPCのIPアドレス(例: 192.168.1.x:8080)にブラウザやcurlでアクセスする。
-
Dockerのネットワークモード:
デフォルトでは、Dockerはブリッジネットワークを使用する。
必要に応じて、hostネットワークモード(--network host)を使用すると、コンテナがホストのネットワークを直接利用できる。
ただし、WSL2ではhostモードが制限される場合があるため、ブリッジモードでポートマッピングを使う方が一般的。 -
WSL2のIPアドレスの動的変更:
WSL2のIPアドレスは再起動ごとに変わる可能性があるため、
ポートフォワーディングスクリプトを定期的に実行するか、
.wslconfigで固定IPを設定する(上級者向け)ことを検討。