如何將WSL2 8080轉送到Windows主機的8080?

如何將WSL2 8080轉送到Windows主機的8080?

我有:

  1. 彈簧靴應用程式運行在 Windows 上在8080上
  2. A服務跑步在 WSL2 內的 Docker 容器中烏班圖和

我正在尋找如何啟用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}
  ]
}

在哪裡

  • bip將是 docker 映射下的值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.1是分配給 WSL 網路的 IP 位址 - 我們需要在其中轉送請求
  • 9003是連接埠 - 來源連接埠和目標連接埠相同

更多關於我偶然發現的靈感或問題的資源:

現在我正在尋求自動化此操作,並確保在更改網路連接時或從睡眠/休眠狀態喚醒後不會出現任何問題(因為透過 ssh 進行另一個連接埠轉發時不時會發生這種情況——但這可能與我的設備上的一些驅動程式)。

相關內容