I am trying to make Xdebug work for Docker container on Windows with PhpStorm. I read different articles and other threads, but still it's not working.
Inside docker-compose.yaml I have following configuration for my app container:
version: "3.7"
services:
#PHP Service
app:
build:
args:
user: user
uid: 1000
context: ./
dockerfile: docker/php/Dockerfile
image: rpg
container_name: rpg-app
restart: unless-stopped
tty: true
environment:
SERVICE_NAME: app
SERVICE_TAGS: dev
PHP_IDE_CONFIG: serverName=RpgServer
working_dir: /var/www
command: /var/www/docker/php/application-init.sh
volumes:
- ./:/var/www
- ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
networks:
- rpg-app-network
depends_on:
- db
...
#Nginx Service
nginx:
image: nginx:1.17-alpine
container_name: rpg-nginx
restart: unless-stopped
tty: true
ports:
- "8080:80"
- "443:443"
volumes:
- ./:/var/www
- ./docker/nginx/conf.d/:/etc/nginx/conf.d/
networks:
- rpg-app-network
depends_on:
- app

Using phpinfo() I get following php configuration:



And I have the following PhpStorm configuration:
Servers

Debug

DBGp Proxy (Don't really think is relevant)

And PHP Remote Debug

I use Chrome's Xdebug Helper plugin to send the session key

And in phpinfo() I can see that the PHP receives the Xdebug session key:

I am listening in the PhpStorm for Xdebug connection (with breakpoints throughout the code):

I run the application in the browser with Xdebug Helper enabled .
Yet. There is no blocking you would expect from breakpoints and no callback to PhpStorm.
If I try to use Debugger Configuration validation in PhpStorm I get the following:

Thanks to LazyOne's I took another look into the configuration and found out that the Step Debugger is disabled.
I install Xdebug in the following way in my php-fpm Dockerfile:
# Install xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug
And this is my original Xdebug configuration:
[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/www/storage/logs/xdebug.log
xdebug.remote_mode = req
I added
xdebug.mode = debug
After rerunning docker-compose up I started receiving a Notice in container logs:
rpg-app | NOTICE: PHP message: Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
I found this thread Xdebug: [Step Debug] Could not connect to debugging client
And added:
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
Getting:
[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/www/storage/logs/xdebug.log
xdebug.remote_mode = req
xdebug.mode = debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
Now everything works! :)
Edit: Following LazyOne's comment I updated to Xdebug v3 configuration settings. The result is:
[xdebug]
xdebug.idekey=PHPSTORM
xdebug.mode = debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
xdebug.log=/var/www/storage/logs/xdebug.logs
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With