Remote Debugging with XDebug from inside a Docker Container does not work
Solution 1
You can try with this configuration. php-apache build provide two method to compile and enable module php.
It's nicer to use docker-php-ext-enable xdebug
to set correct file configuration.
FROM php:5.4-apache
# Enable and configure xdebug
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN sed -i '1 a xdebug.remote_autostart=true' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_mode=req' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_handler=dbgp' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_connect_back=1 ' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_port=9000' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_host=127.0.0.1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
RUN sed -i '1 a xdebug.remote_enable=1' /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini
Solution 2
For me on a PHP, NGINX Docker environment using sublime, I got it to work with these settings:
xdebug.remote_enable = 1
xdebug.remote_mode = req
xdebug.remote_port = 9001
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
The one that took me forever to figure out was to set the remote_host to host.docker.internal.
Christoph Grimmer-Dietrich
I'm an IT Ninjaneer from Cassel, Germany, mainly working with Kotlin, Java, C# and the occasional PHP. I have two kids, like riding the bike and am mildly addicted to Netflix ;-)
Updated on June 11, 2022Comments
-
Christoph Grimmer-Dietrich almost 2 years
I'm trying to setup a dockered AMP environment and can't get the remote debugger working. My setup is as follows:
I have a database container running mysql which is working like a charm. I built a Docker image 'phpmysqli' with the following Dockerfile
FROM php:apache RUN docker-php-ext-install mysqli mbstring # zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so RUN pecl install xdebug RUN echo 'zend_extension = /usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so' >> /usr/local/etc/php/php.ini RUN touch /usr/local/etc/php/conf.d/xdebug.ini; \ echo xdebug.remote_enable=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \ echo xdebug.remote_autostart=0 >> /usr/local/etc/php/conf.d/xdebug.ini; \ echo xdebug.remote_connect_back=1 >> /usr/local/etc/php/conf.d/xdebug.ini; \ echo xdebug.remote_port=9000 >> /usr/local/etc/php/conf.d/xdebug.ini; \ echo xdebug.remote_log=/tmp/php5-xdebug.log >> /usr/local/etc/php/conf.d/xdebug.ini; RUN echo 'date.timezone = Europe/Berlin' > /usr/local/etc/php/conf.d/date.ini
I call
docker run --rm -ti --name web -p 127.0.0.1:8080:80 -v /path/to/projects:/var/www/html --link db:db phpmysqli
After this phpinfo respectively php -i shows that xdebug 2.3.2 is up and running.
Next I setup a Server inside IntelliJ IDEA called 'Docker' with Host
127.0.0.1
, Port8080
and Debugger Xdebug. I setup the path mapping analogous to the Volume mapping in the docker run statement.In the PHP->Debug settings I checked that I use port
9000
for incoming connections, that I will accept external connections and that I will not ignore connections from unregistered servers.After this I created a new PHP Remote Debug Configuration called Docker, too. Server is Docker, session id is
XDEBUG_IDEA
.I can call PHP files on the Container, I can connect to the db via the link... but for some reason nothing whatsoever happens when I try to start a debug session. I tried using a cookie (and yes, I set
XDEBUG_IDEA
as session id in xdebug helper). I tried sendingXDEBUG_SESSION_START=XDEBUG_IDEA
asGET
...Can you smart people out there tell me what I missed?