首页 > 编程语言 >使用phpstorm远程连接docker调试xdebug

使用phpstorm远程连接docker调试xdebug

时间:2022-10-27 15:47:22浏览次数:42  
标签:xdebug 配置 phpstorm docker php local

一、docker中安装xdebug

如果已经有了docker容器,那么在docker的php容器中使用pecl安装xdebug

pecl install xdebug

image

然后使用下列命令开启xdebug扩展

echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/xdebug.ini

开启以后需要重启php-fpm才可以在web端可用,但是直接重启docker的话,刚刚安装的扩展就丢失掉了。
可以使用shell命令来平滑重载php-fpm,这样就不需要重启docker了。

#先查看php-fpm的进程id
ps -ef | grep php-fpm

#然后平滑重载php-fpm
kill -USR2 1

image

到这里xdebug的安装与配置就已经完成了。

如果你的docker容器是最小化镜像没有ps命令,并且你的容器里只有php-fpm一个镜像,那么你的容器里id为1的进程一定是php-fpm,可以直接使用kill -USR2 1重载php-fpm。

如果你的容器中不止有php-fpm一个镜像,那么你需要安装一下ps命令查找一下php-fpm的进程id了。

#更新apt
apt update

#安装ps
apt install -y procps

安装完成后可以写一个简单脚本查看xdebug的默认配置项。

<?php
 xdebug_info();

image

发现xdebug开启成功,但是docker容器没有给它配置端口。

二、xdebug的配置项

xdebug3配置项的key几乎都换了一遍,不过改过以后的新版本要配置的东西更少了,下面列出几个常用选项。请将下列配置写入/usr/local/etc/php/conf.d/xdebug.ini文件,若没有这个文件请使用vi命令添加一份

;xdebug扩展的价值位置
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20210902/xdebug.so
;xdebug扩展的模式需要修改为debug模式才会进入断点调试
xdebug.mode=debug
;是否开启请求监听
xdebug.start_with_request=yes
;监听客户端的地址,host.docker.internal为docker宿主机的地址,我是本地docker环境,docker会自动编译为win的ip地址
xdebug.client_host=host.docker.internal
;监听客户端的端口,xdebug默认为9003
;xdebug.client_port=9003

三、phpstorm配置

phpstorm中使用xdebug需要配置一下本地php解释器,这里的php解释器可以直接使用本地开发环境中的php,但是本地开发环境中也需要按照相同版本的xdebug。
我本地的开发环境就是直接使用的docker,所以这次会把docker镜像配置到phpstorm中作为解释器。

如果你的docker镜像中没有配置xdebug,那么你需要在php的dockerFile中添加以下代码,并更新自己的docker镜像

# 安装xdebug
RUN yes | pecl install xdebug \
    && echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/xdebug.ini \
    && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/xdebug.ini
(1) phpstorm连接docker

先在phpstorm的file->settings->docker中配置一个链接路径,docker默认的链接端口为2375,注意一定要connection 状态为 successful

image

(2) phpstorm配置php解释器

进入file->settings->php中配置php解释器,这里的server选择刚刚配置的docker,image name选择自己使用的docker镜像,配置完成后记得查看加载完成的镜像中xdebug是否已开启

image

(3)phpstorm配置代码同步

先配置远程调试时的代码同步选项,不配置这个的话远程调试时会一直弹出要你绑定代码同步的提示窗口。

配置mapping的时候第三步deployment path填写的是docker容器中的项目地址,不是项目的挂载地址。

(4) phpstorm配置debug

file->settings->php->debug 这里填写安装xdebug时配置的client_port

image

file->settings->php->debug->dbgp prot 填写项目域名以及端口号
image

(5) phpstorm配置php server

file->settings->php->server 这里使用刚刚配置好的mapping

image

(6) phpstorm配置

先在phpstorm顶栏的调试项中增加一个远程debug的配置
image

然后在配置项中使用ide key ,server选项选择刚刚配置好的php server
image

完成以上配置,再打开phpstorm的监听按钮,就可以开始断点调试了,在postman等请求中加上XDEBUG_SESSION=PHPSTORM选项就会被xdebug监听到了

image

(7) 原理

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

标签:xdebug,配置,phpstorm,docker,php,local
From: https://www.cnblogs.com/wyycc/p/16613796.html

相关文章

  • linux 快速安装docker
    文档说明:只记录关键地方;试验环境:linuxdebian11目标:debian或者ubuntu快速使用上docker#!/bin/bash#https://www.ruanyifeng.com/blog/2017/11/bash-set.htmlset......
  • docker安装solr
    目录一、简介二、docker安装三、创建solr核心命令四、配置solr登录密码五、接口操作六、参考一、简介solr是一个基于Lucene的Java搜索引擎服务器。同时对其进行了扩展,提......
  • 狂神说学习笔记:Docker进阶-Docker Compose
    DockerComposehttps://docs.docker.com/compose/简介Composeisatoolfordefiningandrunningmulti-containerDockerapplications.WithCompose,youuseaY......
  • docker安装nginx配置
    编译安装nginx的配置文件的路径在哪这个版本不同,位置还是不同的。我的是nginx-1.9.9版本源码安装,配置文件在conf这个目录里面:/usr/local/nginx/conf/nginx.conf如果你找不见......
  • Docker install on Debian 10
    DockerInstallation#Debian10(Buster)#https://docs.docker.com/engine/install/debian/sudoapt-getremovedocker\docker-engine\docker.io\......
  • Docker配置阿里云镜像加速
    Docker配置阿里云镜像加速登录阿里云:https://cn.aliyun.com控制台--->产品与服务--->容器镜像服务阿里云镜像加速器配置地址:https://kgmux0ys.mirror.ali......
  • Docker 容器间的通信
    前戏容器同学有三种方式:IPDockerDNSServerjoined IP通信两个容器需要互通,必须要有同意网络的网卡,满足条件后容器就可以互相通信了。DockerDNSServer通过IP访问容器虽......
  • Dockerfile指令说明
    Dockerfile1、FROM基础镜像,当前镜像是基于那个镜像的,指定一个已经存在的镜像作为模板2、MAINTAINER镜像维护者的姓名和邮箱地址3、RUN容器构建的时候需要运行的命......
  • Docker实战:Docker安装WordPress,快速搭建自己的博客
    1、WordPress介绍官网:​​WordPress.com:快速、安全的受管WordPress托管服务​​WordPress是一种基于php编程语言开发的CMS管理系统,WordPress有丰富的插件和模板,用户可以快......
  • docker容器化业务
    1、环境准备:设备IP地址作用系统版本mysql-master192.168.100.213Nginx-Web服务器Ubuntu2004mysql-slave192.168.100.214Nginx-Web服务器Ubuntu2004harbor1192.168.100.215反......