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.tgz
1.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-fpm
container_name: php71
build:
context: ./php/7.1.33
dockerfile: Dockerfile
volumes:
# 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/www
environment:
- TZ=Asia/Shanghai
depends_on:
- mysql
networks:
- ms-network
restart: always
ports:
- "9000:9000"
extra_hosts:
- "host.docker.internal:host-gateway"
下面是dockerfile文件内容
cpp
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、最后就是有点难适应这样的调试方式