へっぽこITエンジニア@名古屋のブログ

Follow me on GitHub

WSL2でのDockerへの他PCからのアクセス

Docker Desktopの有料化の対応で WSL2を使ってDockerを動かせるようにはなったのですが、 localhost空のアクセス以外、例えば自分自身のPCからでもIPアドレスやPC名などでアクセスできないのです。

他PC空も当然アクセスできませんでした。

調べてみると、原因は2つでWSL2へのネットワークが流れてないのとファイヤーウォールでした。

今回はその解決方法を記載します。

WSL2へのネットワークが流れてない

ipconfigでネットワークの情報を見ると イーサネット アダプター vEthernet (WSL):というのがあるかと思います。

IP受け取っても、こちらに流れないので、起動したDockerが動かないようです。

なので以下のコマンドで、そちらに流れるようにします。

今回はtomcatのポート8080で起動しているとして記載します。ポート番号は各自変更お願いします。

PowerShellを管理者権限で実行してください。 PowerShellを検索して右クリックすると出てくると思います。

netsh.exe interface portproxy add v4tov4 listenaddress=${自身のPCのipアドレス} listenport=8080 connectaddress=${ipconfigで調べたWSLのipアドレス} connectport=8080

設定確認は以下です。

netsh.exe interface portproxy show v4tov4

削除しないとローカルでTomcatを動かしたときに流れなくなるので、不要になったら削除です。

netsh.exe interface portproxy delete v4tov4 listenport=8080 listenaddress=${自身のPCのipアドレス}

これを設定すると、ローカルからIPアドレスやPC名などでアクセスできるようになります。

FWの開放

他PCからアクセスするにはまだありまして、 それがファイヤーウォールです。

普通であれば、画面から変更できて、特定のPC空などからアクセスを制御できたりするのですが、 会社環境のためか、なぜか変更できない・・・

そこで緊急回避策です。
PowerShellで開放できます。

New-NetFirewallRule -DisplayName "ALLOW TCP PORT 8080" -Direction inbound -Profile Any -Action Allow -LocalPort 8080 -Protocol TCP

終わったら閉じましょう

Remove-NetFirewallRule -DisplayName "ALLOW TCP PORT 8080"

まとめ

WSL2でローカルで動かしてテストするだけなら、Docker Desktopの有料化の対応で十分ですが、 どこかのPCで動かして、サーバっぽく使うにはもう一工夫必要です。

ECSなどいろいろサービスあるので、そちらを使ったほうがよい気がしますが。

作成日:2022-02-12  更新日:2022-02-12