无法在 Docker 化应用中使用 DBGp 将 Xdebug 从远程服务器重定向到本地主机



我们是一个团队,在远程服务器上为不同的项目使用docker堆栈(比Mac性能更好)。这些堆栈有几个服务,如PHP(与Xdebug), DBGp, ElasticSearch....

我已经为一个问题工作了两个星期,但还是解决不了。我不能在远程服务器上使用这个堆栈进行调试(它在我的本地计算机上工作得很好,但速度很慢,而且浪费了太多时间)。我认为ssh隧道是错误的

这里有一些信息:

Xdebug配置:

[xdebug]
xdebug.max_nesting_level=2048
xdebug.remote_enable=1
xdebug.remote_connect_back=0
xdebug.remote_port=9001
xdebug.remote_host=dbgp
xdebug.idekey=PHPSTORM
xdebug.remote_log="/var/www/html/public/xdebug.log"

Xdebug日志:

[6] Log opened at 2021-01-20 09:00:21
[6] I: Connecting to configured address/port: dbgp:9001.
[6] I: Connected to client. :-)
[6] -> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/html/public/test.php" language="PHP" xdebug:language_version="7.3.20" protocol_version="1.0" appid="6" idekey="PHPSTORM"><engine version="2.9.6"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[https://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2020 by Derick Rethans]]></copyright></init>
[6] <- proxyerror -i 1 -- VW5hYmxlIHRvIGNvbm5lY3QgdG8gdGhlIHNlcnZlciBsaXN0ZW5lciA5Mi4xODQuMTAwLjIyNTo5
MDAxIFs8X19tYWluX18uc2Vzc2lvblByb3h5IGluc3RhbmNlIGF0IDB4N2Y5Y2VjZDFkNWYwPl0=
[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="proxyerror" transaction_id="1"><error code="4"><message><![CDATA[unimplemented command]]></message></error></response>
[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" status="stopping" reason="ok"></response>
[6] <- proxyerror -i 2 -- VW5hYmxlIHRvIGNvbm5lY3QgdG8gc2VydmVyIHdpdGgga2V5IFtQSFBTVE9STV0sIHN0b3BwaW5n
IHJlcXVlc3QgWzxfX21haW5fXy5zZXNzaW9uUHJveHkgaW5zdGFuY2UgYXQgMHg3ZjljZWNkMWQ1
ZjA+XQ==
[6] -> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="https://xdebug.org/dbgp/xdebug" command="proxyerror" transaction_id="2"><error code="4"><message><![CDATA[unimplemented command]]></message></error></response>
[6] Log closed at 2021-01-20 09:00:52

DBGp config from docker-compose。(使用komodo-python-dbgp启动Dockerfile):

dbgp:
build:
context: './.docker/dbgp/'
ports:
- ${DBGP_PORT}:9002

DBGp日志:

dbgp_1                | 2021-01-20T08:59:34.893975559Z INFO: dbgp.proxy:     dbgp listener on 0.0.0.0:9001
dbgp_1                | 2021-01-20T08:59:34.893982748Z INFO: dbgp.proxy:     IDE listener on  0.0.0.0:9002
dbgp_1                | 2021-01-20T09:00:01.496772798Z INFO: dbgp.proxy: Server:onConnect ('92.184.100.225', 43547) [proxyinit -p 9001 -k PHPSTORM -m 1]
dbgp_1                | 2021-01-20T09:00:21.203770947Z INFO: dbgp.proxy: connection from 192.168.192.9:57390 [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.648803308Z ERROR: dbgp.proxy: Unable to connect to the server listener 92.184.100.225:9001 [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.648853429Z Traceback (most recent call last):
dbgp_1                | 2021-01-20T09:00:52.648864741Z   File "/usr/bin/pydbgpproxy", line 220, in startServer
dbgp_1                | 2021-01-20T09:00:52.648874088Z     self._server.connect((self._serverAddr[0], self._serverAddr[1]))
dbgp_1                | 2021-01-20T09:00:52.648882211Z   File "/usr/lib/python2.7/socket.py", line 228, in meth
dbgp_1                | 2021-01-20T09:00:52.648890343Z     return getattr(self._sock,name)(*args)
dbgp_1                | 2021-01-20T09:00:52.648898305Z error: [Errno 110] Operation timed out
dbgp_1                | 2021-01-20T09:00:52.649270051Z WARNING: dbgp.proxy: Unable to connect to server with key [PHPSTORM], stopping request [<__main__.sessionProxy instance at 0x7f9cecd1d5f0>]
dbgp_1                | 2021-01-20T09:00:52.649739684Z INFO: dbgp.proxy: session stopped

SSH命令,我用来重定向到我的本地:

ssh -R 9001:127.0.0.1:25115 user@server

:

  • 9001是PhpStorm监听的本地端口
  • 25115是DBGp重定向到9002 (DBGp中的IDE侦听器)的公共远程端口

我还尝试将127.0.0.1更改为应用程序的docker网关地址,但仍然不起作用。

我从PhpStorm注册我的IDE在Tools > DBGp Proxy > Register IDE。当我在我的应用程序中加载一个php页面时,它只加载30秒,并显示我放在顶部的日志。

我做错了什么,有人能帮帮我吗?😕

似乎可以使此工作,但您的配置必须完全重新完成。

  1. SSH隧道没有任何意义。在服务器上,您将25115映射到dbgp容器的9002端口,同时,您尝试通过SSH在同一端口上侦听以将该端口重定向到您的开发机器。

  2. 代理通过获取注册的IP来发起新的连接到已注册的ide,使用Docker端口映射(25115:9002),它将是127.0.0.1,因此容器将尝试将调试数据发送给自己,这显然是行不通的。

你需要做什么-请查看我在这里的评论,特别是这个视频。

您需要修改代理代码,以便它启动到Docker主机的调试连接,并使用IDE密钥作为端口号。

在我的截屏中,我使用了'127.0.0.1',在你的情况下,这应该是一个主机名/IP,容器可以使用它来连接到Docker主机。在Linux上,我通常使用eth0接口地址。

如果我没看错的话,端口25115在服务器上是公开的,所以你不需要隧道连接到它。

您需要隧道的目的是每个开发人员应该在服务器上侦听他们的个人端口,以便代理可以通过隧道将数据发送到开发人员的机器。

隧道应该看起来像ssh -R 8123:127.0.0.1:9001,其中:

  • 8123是每个开发者唯一的IDE密钥。
  • 9001是PhpStorm在开发机上监听的端口。

就是这样,请试一试。

最新更新