WSL2 8080 を Windows ホストの 8080 に転送するにはどうすればよいですか?

WSL2 8080 を Windows ホストの 8080 に転送するにはどうすればよいですか?

私は持っている:

  1. スプリングブーツアプリケーション実行中Windowsの場合8080でそして
  2. 1つのサービスランニングWSL2内のDockerコンテナ内Ubuntu、そして

私は方法を探していますこのサービスに対して Windows ホストの 8080 を有効にしますか?

制限サービスは開発セットアップの一部であり、docker-compose を使用して構築されるため、ソリューションは IP に依存しないか、完全に (最大限に) 自動化される必要があります。

アプリケーションは でアクセス可能ですcurl $(hostname).local:8080が、ルールを追加しようとするとiptables(それらに基づいて)ここで見つかりました)をリダイレクトする「wsl:8080->winhost:8080」:

sudo iptables -A FORWARD -i lo -o eth0 -p tcp --syn --dport 8080 -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -i lo -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -i eth0 -o lo -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -i lo -p tcp --dport 8080 -j DNAT --to-destination 172.28.80.1:8080
sudo iptables -t nat -A POSTROUTING -o eth0 -p tcp --dport 8080 -d 172.28.80.1 -j SNAT --to-source 127.0.0.1:8080

ここで172.28.80.1、- は Windows ホスト IP であり、curlタイムアウトになるまでハングアップし始めます。

助言がありますか?

答え1

次のようにして、WSL2 の Docker コンテナ内から Windows マシンで開かれたポート (Ubuntu 上の xdebug を含む PHP コンテナが Windows 上の phpstorm に接続) への接続を確立できました。

  1. docker-compose.yml または docker-compose.override.yml でホストをマップし、コンテナを再構築します。
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. コンテナからping をhost.docker.internal実行すると、Docker によってネットワークに割り当てられた IP が表示されるようになります。または、/etc/docker/daemon.json次の構造のファイルを作成して、ブリッジ IP とデフォルトの Docker サブネット IP 範囲を手動で指定することもできます。詳細はこちらをご覧ください。https://serverfault.com/a/942176/1029877
{
  "bip": "172.30.0.1/16",
  "default-address-pools":[
    {"base":"172.32.0.0/16","size":24},
    {"base":"172.33.0.0/16","size":24},
    {"base":"172.34.0.0/16","size":24}
  ]
}

どこ

  • bipdockerがマップする値になりますhost.docker.internal
  • default-address-poolsコンテナにIPアドレスを割り当てるために使用されます
  1. 次に、新しいiptableルールを次のように定義します。
iptables -t nat -A PREROUTING -j DNAT -d 172.30.0.1 -p tcp --dport 9003 --to 172.24.96.1

どこ

  • 172.30.0.1最初のリクエストの宛先 - 接続しようとしている場所
  • 172.24.96.1WSLネットワークに割り当てられたIPアドレスです。リクエストを転送する必要があります。
  • 9003ポートは送信元と送信先で同じです

インスピレーションや私が遭遇した問題に関するその他のリソース:

現在、これを自動化し、ネットワーク接続を変更するときやスリープ/休止状態から復帰した後に問題が発生しないようにしたいと考えています (SSH 経由の別のポート転送で時々発生するため、ただし、これはデバイス上の一部のドライバーに関連している可能性があります)。

関連情報