安装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.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、最后就是有点难适应这样的调试方式
相关推荐
学嵌入式的小杨同学15 小时前
【Linux 封神之路】信号编程全解析:从信号基础到 MP3 播放器实战(含核心 API 与避坑指南)
java·linux·c语言·开发语言·vscode·vim·ux
_运维那些事儿18 小时前
VM环境的CI/CD
linux·运维·网络·阿里云·ci/cd·docker·云计算
lpruoyu20 小时前
【Docker进阶-05】Docker网络
网络·docker·容器
徐小夕@趣谈前端21 小时前
Web文档的“Office时刻“:jitword共建版2.0发布!让浏览器变成本地生产力
前端·数据结构·vue.js·算法·开源·编辑器·es6
三块钱07941 天前
群晖docker部署Mattermost,对接openclaw
运维·docker·容器
苦逼IT运维1 天前
从 0 到 1 理解 Kubernetes:一次“破坏式”学习实践(一)
linux·学习·docker·容器·kubernetes
萧曵 丶1 天前
Docker 面试题
运维·docker·容器
为什么不问问神奇的海螺呢丶1 天前
n9e categraf docker 监控配置
运维·docker·容器
青树寒鸦1 天前
wsl的docker备份mongo和迁移
运维·mongodb·docker·容器
zhanglianzhao1 天前
Win 11 WSL 配置Claude code 并在VsCode中使用
ide·vscode·编辑器·claude·cladue code