Trudności z konfiguracją Xdebug (Docker, PHPStorm)

0

Witam, czy może ktoś mi pomóc w skonfigurowaniu Xdebug dla aplikacji w Dockerze i PHPStorm? Sytuacja wygląda tak, że po włączeniu opcji Start Listening for PHP Debug Connections, postawieniu breakpointa i włączeniu dodatku Xdebug Helper w przeglądarce WWW nic się nie dzieje.

W Dockerfile instaluję Xdebug za pomocą poleceń:

pecl install xdebug
docker-php-ext-enable xdebug

i kopiuję konfigurację do kontenera:

COPY xdebug.ini /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
COPY error_reporting.ini /usr/local/etc/php/conf.d/error_reporting.ini

Zawartość xdebug.ini:

zend_extension=xdebug

[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9003
xdebug.idekey=PHPSTORM

Zawartość error_reporting.ini:
error_reporting=E_ALL

Następnie wchodzę do kontenera i upewniam się, że Xdebug jest włączony:

/usr/local/etc/php/conf.d # php --version
PHP 8.0.13 (cli) (built: Nov 30 2021 08:08:04) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.13, Copyright (c) Zend Technologies
    with Zend OPcache v8.0.13, Copyright (c), by Zend Technologies
    with Xdebug v3.1.2, Copyright (c) 2002-2021, by Derick Rethans

/usr/local/etc/php/conf.d # php --ini
Configuration File (php.ini) Path: /usr/local/etc/php
Loaded Configuration File:         /usr/local/etc/php/php.ini
Scan for additional .ini files in: /usr/local/etc/php/conf.d
Additional .ini files parsed:      /usr/local/etc/php/conf.d/docker-php-ext-apcu.ini,
/usr/local/etc/php/conf.d/docker-php-ext-intl.ini,
/usr/local/etc/php/conf.d/docker-php-ext-opcache.ini,
/usr/local/etc/php/conf.d/docker-php-ext-pdo_mysql.ini,
/usr/local/etc/php/conf.d/docker-php-ext-sodium.ini,
/usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini,
/usr/local/etc/php/conf.d/error_reporting.ini

Konfiguracja w PHPStorm wygląda następująco:

  1. i1.png

  2. i2.png

  3. i3.png

  4. i4.png

  5. i5.png

Xdebug helper:
6. i6.png

1

U mnie zazwyczaj robię tak:

Dockerfile

FROM php:8.0.3-apache-buster
RUN pecl install xdebug-3.0.3
RUN docker-php-ext-enable xdebug

#domyślne zmienne środowiskowe (możesz je nadpisać np. w docker-compose lub env)
ENV PHP_IDE_CONFIG serverName=localhost
ENV XDEBUG_SESSION PHPSTORM
ENV XDEBUG_CONFIG client_host=172.17.0.1 client_port=9003 start_with_request=yes autostart=1

Ustaw też XDEBUG_MODE na debug,develop - najlepiej w env lub docker-compose, żebyś mógł sobie łatwo wyłączyć xdebuga jak nie jest potrzebny

W tej konfiguracji jak powyżej na linux łapie mi zarówno webserver jak i cli. SevrerName jaki ustawiłsz musi być zgodny z nazwą w PHP Storm.

0

Dzięki za podsunięcie nowego pomysłu z Dockerfile. Póki co próbowałem różnych sztuczek, lecz najwidoczniej czegoś mi brakuje. Error log PHP pokazuje:

[11-Dec-2021 15:03:54 UTC] Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (fallback through xdebug.client_host/xdebug.client_port) :-(
2

Hmm wygląda jakby kontener próbował się połączyć z localhost (co się nie uda) zamiast z IP hosta. Wywal wszystkie php.ini/envy itp i upewnij się co masz w tej linijce

ENV XDEBUG_CONFIG client_host=172.17.0.1 client_port=9003 start_with_request=yes autostart=1

Jako client_host powinieneś mieć IP hosta, czyli na windowsie pewnie wystarczy wklepać: host.docker.internal. Ta konfiguracja powinna zadziałać automatycznie bez żadnych dodatkowych plików php.ini - musisz tylko ustawić ten XDEBUG_MODE na debug,develop gdzieś.

Ogólnie wydaje mi się, że jesteś blisko tylko z jakiegoś powodu łączysz się z localhostem zamiast z hostem.

Ja jak mam wyłączony nasłuch w xdebug i odpalam jakiś skrypt w konsoli to mam coś takiego jak poniżej, gdzie 172.17.0.1 to wcześnie ustawione IP hosta.

[11-Dec-2021 15:15:38 UTC] Xdebug: [Step Debug] Could not connect to debugging client. Tried: 172.17.0.1:9003 (through xdebug.client_host/xdebug.client_port) :-(

Może ktoś się jeszcze wypowie, czy na Windowsie nie trzeba czegoś innego zrobić - ostatnio konfigurowałem XDEBUGA na Windowsie z rok temu, więc nie pamiętam dokładnie, ale szybko poszło używając tego co normalnie robiłem na Linux.

1 użytkowników online, w tym zalogowanych: 0, gości: 1