Remote Debugging with XDebug from inside a Docker Container does not work

17,419

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.

Share:
17,419
Christoph Grimmer-Dietrich
Author by

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, 2022

Comments

  • Christoph Grimmer-Dietrich
    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, Port 8080 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 sending XDEBUG_SESSION_START=XDEBUG_IDEA as GET...

    Can you smart people out there tell me what I missed?