Como encaminhar WSL2 8080 para 8080 do host Windows?

Como encaminhar WSL2 8080 para 8080 do host Windows?

Eu tenho:

  1. uma bota de primaveraaplicativo em execuçãono Windowsem 8080e
  2. aserviçocorrendono contêiner Docker dentro do WSL2Ubuntu, e

estou querendo saber como fazerhabilitar o 8080 do host Windows para este serviço?

Olimitaçãoé que o serviço faz parte da configuração de desenvolvimento e é construído com o docker-compose, portanto a solução deve ser independente de IP ou totalmente (máxima) automatizada.

O aplicativo pode ser acessado com curl $(hostname).local:8080, mas quando tento adicionar iptablesregras (com base nessasencontrado aqui) para redirecionar"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

onde 172.28.80.1- é o IP do host do Windows e curlcomeça a travar até o tempo limite.

Alguma sugestão?

Responder1

Consegui fazer a conexão de dentro de um contêiner Docker no WSL2 para uma porta aberta na máquina Windows (contêiner php com xdebug no Ubuntu conectando-se ao phpstorm no Windows) da seguinte maneira:

  1. mapeie o host em docker-compose.yml ou docker-compose.override.yml e reconstrua o contêiner
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. O ping host.docker.internaldo contêiner agora deve revelar o IP alocado pelo docker para sua rede ou você pode especificar manualmente o IP da ponte e o(s) intervalo(s) de IP da sub-rede do docker padrão criando um arquivo /etc/docker/daemon.jsoncom a seguinte estrutura - mais detalhes aqui: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}
  ]
}

onde

  • bipseria o valor que o docker mapeia sobhost.docker.internal
  • default-address-poolsserá usado para alocar endereços IP para contêineres
  1. então defina uma nova regra iptable como segue
iptables -t nat -A PREROUTING -j DNAT -d 172.30.0.1 -p tcp --dport 9003 --to 172.24.96.1

onde

  • 172.30.0.1é o destino da solicitação inicial - onde está tentando se conectar
  • 172.24.96.1é o endereço IP atribuído à rede WSL - para onde precisamos encaminhar a solicitação
  • 9003é a porta - a mesma para origem e destino

Mais recursos para inspiração ou problemas que encontrei:

Agora estou procurando automatizar isso e garantir que não haja problemas ao alterar as conexões de rede ou após despertar do modo de suspensão/hibernação (como acontece de tempos em tempos com outro encaminhamento de porta por ssh - no entanto, isso pode estar relacionado a alguns drivers no meu dispositivo).

informação relacionada