Wie leite ich WSL2 8080 an den 8080 des Windows-Hosts weiter?

Wie leite ich WSL2 8080 an den 8080 des Windows-Hosts weiter?

Ich habe:

  1. ein Spring BootAnwendung ausgeführtunter Windowsauf 8080Und
  2. AServiceläuftim Docker-Container innerhalb des WSL2Ubuntu und

Ich suche nachden 8080 des Windows-Hosts für diesen Dienst aktivieren?

DerEinschränkungist, dass der Dienst Teil des Entwicklungs-Setups ist und mit Docker-Compose erstellt wird, daher sollte die Lösung IP-unabhängig oder vollständig (maximal) automatisiert sein.

Die Anwendung ist mit erreichbar curl $(hostname).local:8080, aber wenn ich versuche, iptablesRegeln hinzuzufügen (basierend auf diesenhier zu finden) umleiten„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

wobei 172.28.80.1- die IP des Windows-Hosts ist, die dann curlbis zum Timeout hängen bleibt.

Irgendwelche Vorschläge?

Antwort1

Ich habe es geschafft, von einem Docker-Container unter WSL2 aus eine Verbindung zu einem auf der Windows-Maschine geöffneten Port herzustellen (PHP-Container mit Xdebug unter Ubuntu, der eine Verbindung zu PHPstorm unter Windows herstellt), und zwar wie folgt:

  1. Host in docker-compose.yml oder docker-compose.override.yml zuordnen und Container neu erstellen
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. Ein Ping host.docker.internalvom Container sollte nun die von Docker für sein Netzwerk zugewiesene IP anzeigen. Alternativ können Sie die Bridge-IP und die standardmäßigen Docker-Subnetz-IP-Bereiche manuell angeben, indem Sie eine Datei /etc/docker/daemon.jsonmit der folgenden Struktur erstellen – weitere Einzelheiten hier: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}
  ]
}

Wo

  • bipwäre der Wert, unter dem Docker Mapshost.docker.internal
  • default-address-poolswird für die Zuweisung von IP-Adressen an Container verwendet
  1. dann definieren Sie eine neue iptable-Regel wie folgt
iptables -t nat -A PREROUTING -j DNAT -d 172.30.0.1 -p tcp --dport 9003 --to 172.24.96.1

Wo

  • 172.30.0.1ist das Ziel der ursprünglichen Anfrage - wo versucht wird, eine Verbindung herzustellen
  • 172.24.96.1ist die dem WSL-Netzwerk zugewiesene IP-Adresse, an die wir die Anfrage weiterleiten müssen
  • 9003ist der Port – derselbe für Quelle und Ziel

Weitere Quellen zur Inspiration oder zu Problemen, auf die ich gestoßen bin:

Jetzt versuche ich, dies zu automatisieren und sicherzustellen, dass beim Ändern der Netzwerkverbindungen oder nach dem Aufwachen aus dem Ruhezustand/Winterschlaf keine Probleme auftreten (da dies von Zeit zu Zeit bei einer anderen Portweiterleitung über SSH vorkommt – dies könnte jedoch mit einigen Treibern auf meinem Gerät zusammenhängen).

verwandte Informationen