- For your local dev, create a
Dockerfile
that is based on your production image and simply installxdebug
into it. Exemple:
FROM php:5
RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=on" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=off" >> /usr/local/etc/php/conf.d/xdebug.ini
- Get you local IP address (
ifconfig
or such) - Start your container with the following environment variable:
XDEBUG_CONFIG="remote_host={{YOUR_IP_ADDRESS}}"
-
Simple
docker
run:docker run -e XDEBUG_CONFIG="remote_host={{YOUR_IP_ADDRESS}}" your-image
-
With
docker-compose
:# docker-compose.yml foo: build: path/to/Dockerfile environment: XDEBUG_CONFIG: remote_host={{YOUR_IP_ADDRESS}}
- In Intellij/PHPStorm go to:
Languages & Frameworks
>PHP
>Debug
>DBGp Proxy
and set the following settings:
Host
: your IP addressPort
: 9000
Then you're all set and can start listening for PHP Debug connections from your IDE. On the first run it will ask you to map
your local directoryies to the docker
directories, but after that nothing will be required anymore!
Happy debugging!
The problem is usually that there is some bug in the networking setup for Docker for Mac / Docker for win that causes the container not to "see" the host machine . The
host.docker.internal
DNS entry solves this issue for both systems, although we noticed that it does not exist for native Docker under unix.To make this work for PhpStorm, the xdebug.ini file should contain at least two entries:
(that is, if you want a debugging session triggered from the browser).
For CLI script debugging I suggest to override
xdebug.remote_host
in the CLI Interpreter settings:Source: Fix Xdebug on PhpStorm when run from a Docker container