- For your local dev, create a
Dockerfilethat is based on your production image and simply installxdebuginto 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
dockerrun: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_CONFIGvariable
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_hostto the new special DNS namehost.docker.internal. For example:xdebug.remote_host = host.docker.internalThis 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