Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从Docker容器内部如何连接到WSL2发行版_Php_Docker_Phpstorm_Xdebug_Wsl 2 - Fatal编程技术网

Php 从Docker容器内部如何连接到WSL2发行版

Php 从Docker容器内部如何连接到WSL2发行版,php,docker,phpstorm,xdebug,wsl-2,Php,Docker,Phpstorm,Xdebug,Wsl 2,设置 Windows上使用WSL2引擎的Docker主机 Linux(Ubuntu-20.04)WSL2发行版与WSL2集成 Docker容器(webdevops/php-apache-dev)从Ubuntu开始 集装箱港口地图8000:8000 docker容器中的PHP Web应用程序现在可以通过Windows主机访问http://localhost:8000 在Windows上运行PhpStorm,并在php apache dev容器中运行此Xdebug设置: xdebug.remot

设置

  • Windows上使用WSL2引擎的Docker主机
  • Linux(Ubuntu-20.04)WSL2发行版与WSL2集成
  • Docker容器(
    webdevops/php-apache-dev
    )从Ubuntu开始
  • 集装箱港口地图8000:8000
docker容器中的PHP Web应用程序现在可以通过Windows主机访问http://localhost:8000

在Windows上运行PhpStorm,并在php apache dev容器中运行此Xdebug设置:

xdebug.remote_connect_back = 0
xdebug.remote_host = host.docker.internal
Xdebug在端口9000连接到PhpStorm,调试正常

xdebug日志:

I: Connecting to configured address/port: host.docker.internal:9000.
I: Connected to client. :-)
...
如果我在Ubuntu上运行PhpStorm,Xdebug将无法访问PhpStorm

Xdebug日志:

I: Connecting to configured address/port: host.docker.internal:9000.
E: Time-out connecting to client (Waited: 200 ms). :-(
如何从我的WSL2 Ubuntu开始在PhpStorm中调试php应用程序?


原因是性能。通过
\\wsl$\Ubuntu-20.04
我的解决方案现在是一种变通方法:

  • Ubuntu中的PHPStorm监听端口9099
  • docker容器中的xdebug使用
    xdebug.remote\u host=host.docker.internal
  • 启动从Windows到Ubuntu的ssh隧道,端口转发9000.9099:
    ssh-R 9000:localhost:9099 localhost

如果我在Ubuntu上启动sshd服务,容器中的
ssh host.docker.internal
会像预期的那样在Ubnutu上打开一个shell。但是xdebug连接仍然不起作用。AFAIK
host.docker.internal
仅在Windows/Mac上可用,而在Linux上不可用:(尽管一些新的docker版本可能已经有:)。因此,请检查
host.docker.internal
域解析为哪个IP(检查必须从docker容器内部进行,而不是从其他地方进行)。一般来说,检查2)连接…它可能仍然需要通过Windows防火墙。应该有一些规则/命令来无缝地将连接从WSL2转发回主机OS(IDE正在运行的地方)。差不多。在任何情况下:也请检查此项:无论您的解决方案是什么:如果它对您有效--将其作为答案发布(稍后您可以接受)--它可能会在类似情况下帮助其他用户。禁用windows防火墙不会改变行为。此解决方案听起来不错,但您究竟是如何转发端口的?此命令返回
ssh:connect to host localhost port 22:Connection densed
,无论它是从WSL2还是从Windows启动的。WSL中是否有要更改的配置参数?我使用此命令管理端口转发以在Windows Powershell中运行:
netsh interface portproxy add v4tov4 listenport=9003 listenaddress=0.0.0 connectport=9099 connectaddress=mywslipaddress
@Bloops,此9003侦听端口的用途是什么?它不应该是9000吗?@Raisen xdebug3默认使用9003。你也可以转发9000