Xdebug,Docker 和 VSCode 在 Windows 10

Xdebug, Docker and VSCode on Windows 10

我正在寻找一些关于在 Windows 10 上使用 Docker 和 VSCode 设置 Xdebug 的指导。我的 docker 设置如下,但我总是得到'EADDRINUSE: address already in use :::9000' 永远不会从 VSCode!

内部获得 Xdebug 的任何输出

该项目基于 Laravel。

.vscode\launch.json

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug on Docker App",
            "type": "php",
            "request": "launch",
            "port": 9000,
            // "pathMappings": {
            //     "/var/www/html": "${workspaceFolder}"
            "pathMappings": {
                "/var/www/html": "C:\development\inventory-service\"
            },
        }
    ]
}

docker文件

# Create and build composer dependencies
FROM composer:2.0 AS vendor

COPY database/ database/

COPY composer.json composer.json
COPY composer.lock composer.lock

RUN composer install \
    --ignore-platform-reqs \
    --no-interaction \
    --no-plugins \
    --no-scripts \
    --prefer-dist

# Create and build application
FROM php:8.0-apache

ENV APACHE_DOCUMENT_ROOT=/var/www/html/public
RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf \
    && sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf

# RUN mv "$PHP_INI_DIR/php.ini-development" "$PHP_INI_DIR/php.ini"

RUN apt-get update && apt-get install -y \
        libpng-dev \
        zlib1g-dev \
        libxml2-dev \
        libzip-dev \
        libonig-dev \
        zip \
        curl \
        unzip \
    && docker-php-ext-configure gd \
    && docker-php-ext-install -j$(nproc) gd \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-source delete

# Install Xdebug
# RUN pecl install -f xdebug
# RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini;
RUN pecl install xdebug && docker-php-ext-enable xdebug \
    && echo "\n\
    xdebug.remote_host = 192.168.150.1 \n\
    xdebug.default_enable = 1 \n\
    xdebug.remote_autostart = 1 \n\
    xdebug.remote_connect_back = 0 \n\
    xdebug.remote_enable = 1 \n\
    xdebug.remote_handler = "dbgp" \n\
    xdebug.remote_port = 9000 \n\
    xdebug.remote_log = /var/www/html/xdebug.log \n\
    " >> /usr/local/etc/php/conf.d/docker-php-xdebug.ini

# Copy the scheduler script into the image
COPY scheduler.sh /usr/local/bin/scheduler
COPY service.sh /usr/local/bin/service
# Set permissions on image folders
RUN a2enmod rewrite headers \
    && chmod u+x /usr/local/bin/scheduler \
    && chmod u+x /usr/local/bin/service

# Copy the application into the image
COPY --from=vendor /usr/bin/composer /usr/bin/composer
COPY --from=vendor /app/vendor/ /var/www/html/vendor/
COPY . /var/www/html

# Set permissions on image folders
RUN chown -R www-data:www-data /var/www/html

我在网上看了很多帖子来设置它,但我似乎总是遇到同样的端口使用问题and/or没有调试数据(尽管VSCode运行调试器)。

非常感谢任何帮助...

好的,所以我需要更新 1 个文件 (dockerfile) 并且我需要创建一个新文件 (.vscode\launch.json).

将以下内容添加到docker文件中(Xdebug使用的端口号是9003)

# Install Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug \
    && echo "\n\
    xdebug.client_host=host.docker.internal \n\
    xdebug.mode=debug \n\
    xdebug.start_with_request=yes \n\
    xdebug.discover_client_host=0 \n\
    xdebug.remote_handler = "dbgp" \n\
    xdebug.client_port=9003 \n\
    xdebug.log = /var/www/html/xdebug.log \n\
    " >> /usr/local/etc/php/conf.d/docker-php-xdebug.ini

然后创建或更新您的 .vscode\launch.json(路径映射:Docker 上的路径,然后是代码文件夹的本地路径)

{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug on Docker App",
            "type": "php",
            "request": "launch",
            "port": 9003,
            "pathMappings": {
                "/var/www/html": "C:\development\inventory-service\"
            },
        }
    ]
}

...然后重建您的 docker 实例。

在浏览器中调试:

从VSCode、select文件进行调试,在需要的地方添加断点,然后按F5开始调试会话。然后从您的 Web 浏览器在本地转到您正在调试的页面。

通过控制台调试 artisan 命令:

从VSCode、select文件进行调试,在需要的地方添加断点,然后按F5开始调试会话。然后 运行 在 docker 实例上直接从命令行(以正常方式)执行控制台命令(从 docker 桌面为相关 container/service 选择 CLI)。

我相信有一种方法可以从您的 VSCode 终端测试控制台,但它对我不起作用!