Php Mac Docker上带SSH隧道的Xdebug
我最近读了很多Docker社区的帖子,内容是关于如何使用Docker for Mac在PHPStorm中调试PHP应用程序。它们都包含一些有用的信息,但在一个地方还没有看到有效的解决方案 以下是我的工作经历 码头集装箱内 编辑xdebug配置 验证xdebug是否正常工作 此时,请尝试运行PHP应用程序。日志应包含每个请求的此类条目:Php Mac Docker上带SSH隧道的Xdebug,php,docker,xdebug,ssh-tunnel,docker-for-mac,Php,Docker,Xdebug,Ssh Tunnel,Docker For Mac,我最近读了很多Docker社区的帖子,内容是关于如何使用Docker for Mac在PHPStorm中调试PHP应用程序。它们都包含一些有用的信息,但在一个地方还没有看到有效的解决方案 以下是我的工作经历 码头集装箱内 编辑xdebug配置 验证xdebug是否正常工作 此时,请尝试运行PHP应用程序。日志应包含每个请求的此类条目: I:连接到配置的地址/端口:127.0.0.1:9000 I:已连接到客户端。:-) 如果在日志中看到类似的情况,则说明远程主机或远程连接回配置不正确 I:检查远
I:连接到配置的地址/端口:127.0.0.1:9000
I:已连接到客户端。:-)代码>
如果在日志中看到类似的情况,则说明远程主机或远程连接回配置不正确
I:检查远程回接地址。
I:检查标题“HTTP\u X\u转发\u FOR”。
I:检查标题“远程地址”。
I:找到远程地址,正在连接到172.18.0.1:9000。
W:正在为“172.18.0.1:9000”创建套接字,轮询:操作正在进行。
E:无法连接到客户端:-(
我见过Xdebug在CLI中工作但不在浏览器中工作的情况,当这个问题出现在日志中时,remote\u connect\u back=0修复了它
sshd配置
为了允许ssh隧道到容器:编辑/etc/ssh/sshd_conf并添加:
网关端口是
如果需要,重新启动sshd(理想情况下,这应该是Dockerfile的一部分)
在主机上
启动反向SSH隧道
运行此命令并使其在单独的终端选项卡中保持打开状态:
ssh-p{container_22_port}-R 9000:localhost:1111root@127.0.0.1
其中{container_22_port}是主机上映射到docker容器上exdposed 22端口的端口。9000是容器内Xdebug使用的端口,1111端口将由主机用于侦听Xdebug连接
使用netcat进行测试
此时,您可以验证Xdebug是否确实将信息从docker容器内部传递到主机。启动netcat查看发送到1111端口的内容,然后运行php应用程序:
nc-l 1111
您应该看到如下内容:
<?xml version="1.0" encoding="iso-8859-1"?>
<init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/xdebug" fileuri="file:///var/www/magento2/index.php" language="PHP" xdebug:language_version="7.0.12" protocol_version="1.0" appid="1006" idekey="XDEBUG_ECLIPSE"><engine version="2.5.0rc1"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Rethans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Copyright (c) 2002-2016 by Derick Rethans]]></copyright></init>
配置PhpStorm
选择文件
->默认设置
,然后在语言和框架
->PHP
->调试
将Xdebug
->调试端口
更改为1111
(我们用来打开ssh隧道的那个)。
PhpStorm此时应该开始接受来自xdebug的连接
这种方法有什么问题吗?我发现不需要SSH隧道就能让它工作
Xdebug只需要连接到正在运行的IDE调试器,但可能已经使用了一些默认端口,如FPM(9000)的端口
容器内
将xdebug选项设置为:
xdebug.remote_enable = 1
xdebug.remote_host = localhost
xdebug.remote_port = 10000
xdebug.remote_connect_back = 1
注意:如果使用nginx代理容器作为反向代理,请将您的远程\u主机设置为您在虚拟\u主机中定义的主机
使用PhpStorm
- 文件->设置
- 语言和框架
- PHP
- 服务器:添加一个并将主机设置为localhost:80,选择了路径映射的Xdebug…将Docker(/var/www/)中的文件夹映射到一个
- 调试:将Xdebug端口设置为10000,并选中“可以接受外部连接”
使用xdebug.remote\u host=host.docker.internal
无处不在。这是一个问题还是一个答案?转换为问题和答案所以接受答案是有意义的,不是吗?这是一个很好的答案,我相信你的努力会得到极大的赞赏。我只是说这篇哈布拉风格的文章更适合你。对不起,我f我以前的评论有点误导。如果这不是已经在某个地方的文档,你应该肯定地考虑把这个贡献给社区文档,或者XDebug,这真的很好,我喜欢这个解决方案,我对{Cululer-22i端口}感到困惑。
xdebug.remote_enable = 1
xdebug.remote_host = localhost
xdebug.remote_port = 10000
xdebug.remote_connect_back = 1