安装xdebug调试工具(docker容器+vscode编辑器+xdebug)
1、直接下载扩展包到本地
https://pecl.php.net/get/igbinary-2.0.8.tgz
https://pecl.php.net/get/msgpack-2.1.2.tgz
https://pecl.php.net/get/xdebug-2.9.8.tgz1.1、php版本对应的xdebug 版本参考:
https://xdebug.org/docs/compat
https://github.com/xdebug/xdebug.org/blob/master/src/XdebugVersion.php
2、配置xdebug.ini文件
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so
; Xdebug 2.x 配置
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_port=9003
xdebug.remote_host=host.docker.internal
xdebug.idekey=VSCODE
xdebug.remote_log=/tmp/xdebug.log
; xdebug.remote_connect_back=1
注意:日志路径如果改成/var/log/xdebug.log,会导致没权限创建…
3、删除以前的容器,执行:docker-compose up -d --build 或者 docker-compose build --no-cache php71, 进入容器检查是否安装成功:
php -m | grep xdebug
或者
php -i | grep xdebug
4、在 vscode 中,点击左侧活动栏的"运行和调试"图标(或按 Ctrl+Shift+D),新增配置文件: launch.json
{"version": "0.2.0","configurations": [{"name": "Listen for Xdebug","type": "php","request": "launch","port": 9003,"pathMappings": {"/var/www/ruifeng_web": "${workspaceFolder}"},"xdebugSettings": {"max_data": 65535,"show_hidden": 1,"max_children": 100,"max_depth": 5},"log": true,"hostname": "0.0.0.0"}]
}
5、vscode 安装 php-debug 插件
下面是docker-compose.yml
php71:# image: php:7.1.33-fpmcontainer_name: php71build:context: ./php/7.1.33dockerfile: Dockerfilevolumes:# docker run -d -p 9000:9000 --name t_php php/v1:7.0.33# docker exec -it t_php /bin/bash# docker cp t_php:/usr/local/etc/php/php.ini-development C:\phpstudy_pro\WWW\docker\php\7.0.33\php.ini# docker stop t_php# docker rm t_php- C:\phpstudy_pro\WWW\docker\php\7.1.33\php.ini:/usr/local/etc/php/php.ini- C:\phpstudy_pro\WWW\docker\php\7.1.33\xdebug.ini:/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini- C:\phpstudy_pro\WWW:/var/wwwenvironment:- TZ=Asia/Shanghaidepends_on:- mysqlnetworks:- ms-networkrestart: alwaysports:- "9000:9000"extra_hosts:- "host.docker.internal:host-gateway"
下面是dockerfile文件内容
FROM php:7.1.33-fpm# 替换为存档镜像源
# 1. 清空并重新配置 sources.list(避免重复)
# 替换为阿里云 Debian 归档源
RUN echo "" > /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/debian-archive/debian buster main" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/debian-archive/debian buster main" >> /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/debian-archive/debian buster-updates main" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/debian-archive/debian buster-updates main" >> /etc/apt/sources.list && \echo "deb http://mirrors.aliyun.com/debian-archive/debian-security buster/updates main" >> /etc/apt/sources.list && \echo "deb-src http://mirrors.aliyun.com/debian-archive/debian-security buster/updates main" >> /etc/apt/sources.list && \apt-get -o Acquire::Check-Valid-Until=false -o Acquire::AllowInsecureRepositories=true update --fix-missing# 更新 Debian 源为更可靠的源
RUN apt-get install -y --allow-unauthenticated --fix-missing \# 基础编译工具autoconf \g++ \make \libtool \# 扩展依赖库libfreetype6-dev \libjpeg62-turbo-dev \libpng-dev \libzip-dev \libgmp-dev \libbz2-dev \libxslt-dev \libicu-dev \# 其他工具vim \curl \unzip \wget \&& docker-php-source extract \&& docker-php-ext-configure gd --with-freetype --with-jpeg \&& docker-php-ext-install \gd \mysqli \pdo_mysql \zip \gmp \bz2 \calendar \exif \gettext \pcntl \shmop \sockets \sysvsem \sysvshm \sysvmsg \wddx \xsl \&& docker-php-source delete \&& apt-get clean && rm -rf /var/lib/apt/lists/*# 手动下载并安装 PECL 扩展
# 复制扩展文件到容器中
COPY ./extend/igbinary-2.0.8.tgz /tmp/
COPY ./extend/msgpack-2.1.2.tgz /tmp/
COPY ./extend/xdebug-2.9.8.tgz /tmp/# 设置临时目录
WORKDIR /tmp# 安装 igbinary
RUN tar -xzf igbinary-2.0.8.tgz && \cd igbinary-2.0.8 && \phpize && \./configure && \make && \make install && \docker-php-ext-enable igbinary && \cd /tmp && rm -rf igbinary-2.0.8 igbinary-2.0.8.tgz# 安装 msgpack
RUN tar -xzf msgpack-2.1.2.tgz && \cd msgpack-2.1.2 && \phpize && \./configure && \make && \make install && \docker-php-ext-enable msgpack && \cd /tmp && rm -rf msgpack-2.1.2 msgpack-2.1.2.tgz# 安装 xdebug
RUN tar -xzf xdebug-2.9.8.tgz && \cd xdebug-2.9.8 && \phpize && \./configure && \make && \make install && \docker-php-ext-enable xdebug && \cd /tmp && rm -rf xdebug-2.9.8 xdebug-2.9.8.tgz && \php -m | grep xdebug
# 检查 PHP 配置文件是否正确加载了 Xdebug: php -i | grep xdebug
# 复制 Redis 扩展源代码
COPY ./extend/redis /usr/src/php/ext/redis# 安装 Redis 扩展
RUN docker-php-ext-install redis# 复制本地 Composer PHAR 文件到容器
COPY ./extend/composer-2.2.25.phar /usr/local/bin/composer
RUN chmod +x /usr/local/bin/composer# 检查 Composer 是否安装成功
RUN composer --version# 设置工作目录
WORKDIR /var/www# 暴露 PHP-FPM 端口
EXPOSE 9000# 启动 PHP-FPM
CMD ["php-fpm"]# docker build -t php/v1:7.0.33 .
# docker-compose build --no-cache php71
难点
1、镜像源问题,好多包下载不了,需要切换成国内镜像源,并且下载好各种扩展包到本地进行安装
2、xdebug.ini配置文件问题,网上很多资料参差不齐,很容易混淆,版本2和版本3的语法不一致
3、vscode 和 xdebug 之间的连接问题,需要修改docker-compose
[7] Log opened at 2025-09-26 06:44:05
[7] I: Checking remote connect back address.
[7] I: Checking header 'HTTP_X_FORWARDED_FOR'.
[7] I: Checking header 'REMOTE_ADDR'.
[7] I: Remote address found, connecting to 172.18.0.1:9003.
[7] W: Creating socket for '172.18.0.1:9003', poll success, but error: Operation now in progress (29).
[7] E: Could not connect to client. :-(
[7] Log closed at 2025-09-26 06:44:05
4、最后就是有点难适应这样的调试方式