Debug your PHP in Docker with Intellij/PHPStorm and Xdebug
- 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 (
ip -o -4 addr list ${MY_NETWORK_INTERFACE:-eth0} | awk '{print $4}' | cut -d/ -f1
) - Start your container with the following environment variables:
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}}" PHP_IDE_CONFIG: "serverName=my.local"
- In Intellij/PHPStorm go to:
Languages & Frameworks
>PHP
>Servers
> and set the following settings:
- Name: name of your server, should be equal to value in
PHP_IDE_CONFIG
variable
Then you're all set and can start listening for PHP Debug connections from your IDE.
Happy debugging!
Actually the solution is extremely simple now: Just set
remote_host
to the new special DNS namehost.docker.internal
. For example:xdebug.remote_host = host.docker.internal
This now works with Docker for Windows or Docker for Mac (not Docker Toolbox) starting from version 18.03 and later. I just tried it and it worked perfectly for me. See documentation: Windows and Mac.
The nice thing about this elegant solution is that it fully abstracts away the magic behind the scenes associated with figuring out the IP address of your host development machine. IMHO, it should be Docker's responsibility to figure that out for you anyway, not the other way around.
EDIT: I've created my own Gist outlining this in detail from scratch here: https://gist.github.com/patricknelson/57ae24986cb13613314fb1f3c00a95d7