Xdebug не работает с контейнером Podman и VSCode.Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Xdebug не работает с контейнером Podman и VSCode.

Сообщение Anonymous »

Я пытаюсь заставить Xdebug работать в контейнере Podman в VSCode.
Сначала я протестировал конфигурацию Xdebug на своем компьютере с Windows без какого-либо контейнера, просто чтобы убедиться, что php.ini< /code> Конфигурация работает, работает следующая конфигурация, и я могу использовать Xdebug:
[xdebug]
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=yes
xdebug.client_port=9003
xdebug.remote_port=9003
xdebug.idekey=VSCODE
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.client_host="127.0.0.1"
zend_extension=xdebug

Затем я попытался создать контейнер из следующего файла Dockerfile:
# Use official PHP image with FPM and CLI
FROM php:8.2-fpm

# Install system dependencies and PHP extensions for Laravel
RUN apt-get update && apt-get install -y \
git \
unzip \
libpq-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
&& docker-php-ext-install pdo pdo_mysql pdo_pgsql zip mbstring xml

# Install Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug

# Configure Xdebug
RUN echo "zend_extension=xdebug.so" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.discover_client_host=yes" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.client_port=9003" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_port=9003" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.idekey=VSCODE" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/php.ini

# Install Composer globally
COPY --from=composer:2.4 /usr/bin/composer /usr/bin/composer

# Set the working directory to /var/www
WORKDIR /var/www

# Copy the Laravel project to the container
COPY . .

# Install Laravel dependencies
RUN composer install --no-interaction --prefer-dist --optimize-autoloader

# Set permissions for storage and cache
RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache

# Expose port 8000 for Laravel's Artisan serve
EXPOSE 8000 9003 9000

# Start the Laravel development server
CMD php artisan serve --host=0.0.0.0 --port=8000

Но когда я запускаю веб-сайт, он не останавливается на точках останова. Думаю, я сделал что-то не так либо с разделом Xdebug, либо с портами в Dockerfile, либо с неправильной командой RUN (возможно, нужно принять во внимание тот факт, что я использую PHP-FPM и сделать что-нибудь модификацию порта?):
podman run -d -p 8000:8000 -p 9003:9003 -p 9000:9000 xdebug

(Я использовал -p 9003:9003 -p 9000:9000 только потому, что безуспешно пытался сделать все, что мог придумать)
< hr />

Обновление:
Я обновил Dockerfile, а также изменил client_host, чтобы использовать вывод wsl hostname -I:
# Use official PHP image with FPM and CLI
FROM php:8.2-fpm

# Install system dependencies and PHP extensions for Laravel
RUN apt-get update && apt-get install -y \
git \
unzip \
libpq-dev \
libonig-dev \
libxml2-dev \
libzip-dev \
&& docker-php-ext-install pdo pdo_mysql pdo_pgsql zip mbstring xml

# Install Xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug

# Configure Xdebug
RUN echo "zend_extension=xdebug.so" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.mode=debug" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.client_port=9003" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.remote_port=9003" >> /usr/local/etc/php/php.ini \
&& echo "xdebug.discover_client_host = 1" >> /usr/local/etc/php/php.ini

# Install Composer globally
COPY --from=composer:2.4 /usr/bin/composer /usr/bin/composer

# Set the working directory to /var/www
WORKDIR /var/www

# Copy the Laravel project to the container
COPY . .

# Install Laravel dependencies
RUN composer install --no-interaction --prefer-dist --optimize-autoloader

# Set permissions for storage and cache
RUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache

# Expose port 8000 for Laravel's Artisan serve
EXPOSE 8000

# Start the Laravel development server
CMD php artisan serve --host=0.0.0.0 --port=8000

Я также добавил вывод xdebug_info() и вижу следующие ошибки:
⚠️ [Step Debug] Creating socket for '172.26.10.30:9003', poll success, but error: Operation now in progress (29). ⊕
🛑 [Step Debug] Could not connect to debugging client. Tried: 172.26.10.30:9003 (through xdebug.client_host/xdebug.client_port). ⊕


Подробнее здесь: https://stackoverflow.com/questions/790 ... and-vscode
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»