繁体   English   中英

Windows 10 上的 Xdebug、Docker 和 VSCode

[英]Xdebug, Docker and VSCode on Windows 10

我正在寻找有关在 Windows 10 上使用 Docker 和 VSCode 设置 Xdebug 的一些指导。我的 docker 设置如下,但我总是得到“EADDRINUSE: address already in use ::9000”,并且从未从内部获得 Xdebug 的任何输出VS代码!

该项目基于 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\\"
            },
        }
    ]
}

文件

# 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

我已经在网上浏览了许多帖子来设置它,但我似乎总是遇到相同的端口使用问题和/或没有调试数据(尽管 VSCode 运行调试器)。

任何帮助非常感谢...

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

在dockerfile中添加以下内容(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 中,选择要调试的文件,在需要的地方添加断点,然后按 F5 开始调试会话。 然后从 Web 浏览器在本地转到您正在调试的页面。

通过控制台调试工匠命令:

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

我相信有一种方法可以从你的 VSCode 终端测试控制台,但它从来没有对我有用!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM