- 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!
Was it working for you guys because of the manual binding in the compose configuration to the environment variable
XDEBUG_CONFIG="remote_host=172.19.0.9"
? What happens when you change that IP tohost.docker.internal
?If it works, I think it can be dramatically simplified by just hard-coding that hostname (either
host.docker.internal
or using10.0.2.2
if you're using Docker Toolbox with Virtualbox). The full hard-coded XDebug INI configuration can be found in my gist (also linked above) which doesn't need to be modified in environment variables, hopefully centralizing and de-cluttering things a bit.