Как перенаправить WSL2 8080 на 8080 хоста Windows?

Как перенаправить WSL2 8080 на 8080 хоста Windows?

У меня есть:

  1. пружинный ботинокприложение работаетна Windowsна 8080и
  2. ауслугабегв контейнере Docker внутри WSL2Убунту и

Я ищу, каквключить хост-компьютер Windows 8080 для этой службы?

Theограничениезаключается в том, что сервис является частью настройки разработки и создается с помощью 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- IP хоста Windows, затем curlначинает зависать до истечения времени ожидания.

Какие-либо предложения?

решение1

Мне удалось установить соединение из контейнера Docker под управлением WSL2 с портом, открытым на машине Windows (контейнер php с xdebug на Ubuntu, подключающийся к phpstorm на Windows) следующим образом:

  1. сопоставьте хост в docker-compose.yml или docker-compose.override.yml и перестройте контейнер
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. Теперь пингование host.docker.internalиз контейнера должно показывать IP-адрес, выделенный Docker для его сети, или вы можете вручную указать IP-адрес моста и диапазон(ы) IP-адресов подсети Docker по умолчанию, создав файл /etc/docker/daemon.jsonсо следующей структурой — более подробную информацию можно найти здесь: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это IP-адрес, назначенный сети WSL, куда нам нужно переслать запрос
  • 9003порт - одинаков для источника и назначения

Дополнительные ресурсы для вдохновения или решения проблем, на которые я наткнулся:

Теперь я хочу автоматизировать этот процесс и убедиться, что не возникнет никаких проблем при смене сетевых подключений или после выхода из спящего режима/режима гибернации (как это время от времени случается при переадресации другого порта через SSH — однако это может быть связано с некоторыми драйверами на моем устройстве).

Связанный контент