安装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、最后就是有点难适应这样的调试方式
相关推荐
景晁2 小时前
(自用)vim的高级命令
linux·编辑器·vim
2501_920047034 小时前
docker相关进程的作用
运维·docker·容器
Ting-yu4 小时前
零基础学Docker(5)--容器数据卷
运维·docker·容器
key_Go5 小时前
07.容器监控
运维·网络·网络协议·docker·监控
苦逼IT运维5 小时前
Windows 作为 Ansible 节点的完整部署流程(含 Docker 部署 Ansible)
windows·docker·ansible
Lin_Aries_04216 小时前
部署 Jenkins 服务器
运维·服务器·docker·容器·云计算·jenkins
Yyyy4827 小时前
Apache、Nginx 和 Tomcat 的区别
编辑器
huangdengji7 小时前
【docker默认防火墙行为调整】
docker·容器
ftswsfb7 小时前
Docker进阶-管理和应用
运维·docker·容器