WSL2 8080을 Windows 호스트의 8080으로 전달하는 방법은 무엇입니까?

WSL2 8080을 Windows 호스트의 8080으로 전달하는 방법은 무엇입니까?

나는 가지고있다:

  1. 스프링 부츠애플리케이션 실행 중윈도우즈에서8080에서그리고
  2. 서비스달리기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 시스템(Windows의 phpstorm에 연결되는 우분투의 xdebug가 있는 PHP 컨테이너)에 열린 포트로 연결했습니다.

  1. docker-compose.yml 또는 docker-compose.override.yml에서 호스트를 매핑하고 컨테이너를 다시 빌드합니다.
services:
  php:
    build:
      context: ./
      target: debug
    extra_hosts:
      - "host.docker.internal:host-gateway"
  1. 이제 컨테이너에서 ping을 실행하면 해당 네트워크에 대해 docker가 할당한 IP가 표시되거나 다음 구조의 host.docker.internal파일을 생성하여 브리지 IP 및 기본 docker 서브넷 IP 범위를 수동으로 지정할 수 있습니다. 자세한 내용은 여기를 참조하세요./etc/docker/daemon.jsonhttps://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를 통해 다른 포트를 전달하는 다른 포트에서 발생하기 때문에). 그러나 이는 다음과 관련이 있을 수 있습니다. 내 장치의 일부 드라이버).

관련 정보