PhpStorm调试docker容器中的php项目

背景

已经通过docker容器启动了一个web服务,并在宿主机可以访问http://localhost:8080访问网页。
现在想使用phpstorm打断点调试代码。

方法

1. 容器内安装xdebug

进入容器

docker exec -it <container-name> bash

为php安装xdebug拓展

apt install php8.1-xdebug

查一下配置文件的路径,并编辑其内容

php --ini|grep xdebug
# 输出路径信息如下(注意末尾多了个逗号)
# /etc/php/8.1/cli/conf.d/20-xdebug.ini,

编辑xdebug配置文件vim /etc/php/8.1/cli/conf.d/20-xdebug.ini,并输入必要的配置项:

zend_extension=xdebug.so

xdebug.mode=debug
xdebug.start_with_request=yes

xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
xdebug.idekey = "phpstorm"

重启fpm使配置生效

service php8.1-fpm restart

到这里,容器内的web服务已经支持调试了,等着客户端跟它通信。

另外,php文件中可以调用xdebug_info()查看xdebug的配置信息。

2. PhpStorm配置调试环境

2.1 配置php解释器

PhpStorm调试docker容器中的php项目_第1张图片
PhpStorm调试docker容器中的php项目_第2张图片
PhpStorm调试docker容器中的php项目_第3张图片
点击确定后,选中这个解释器,并保存设置。

2.2. 配置被调试代码所在的服务器

PhpStorm调试docker容器中的php项目_第4张图片

2.3 开始调试

PhpStorm调试docker容器中的php项目_第5张图片
随后点击调试按钮(小瓢虫)即可监听调试。打个断点,发个请求试试。

3. 效果

PhpStorm调试docker容器中的php项目_第6张图片

4. 原理

xdebug的工作流程:客户端使用浏览器通过80端口访问服务端,服务端因为开启了xdebug所以根据配置,将调试信息通过9003端口发送到刚刚配置的docker宿主机地址(docker宿主机就是我们的客户端地址,因为phpstorm运行在windos宿主机上),宿主机上的phpstorm监听到9003端口的响应以后,通过dbpg协议与服务端进行连接,xdebug的每一步进都会响应到phpstorm上,phpstorm在接收到响应后,再通过docker环境里的php解释器,解释请求并显示在我们的编辑界面上。

你可能感兴趣的:(phpstorm,docker,php)