问题
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?
回答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
回答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.
回答3:
close: xdebug.remote_connect_back=0
add: xdebug.remote_host=192.168.0.102[your docker host/machine IP]
回答4:
If you don't want do change xdebug config in the container and want to make it work using xdebug.remote_connect_back=1
you can set the HTTP-Header X-Forwarded-For
to the IP of host.docker.internal
und thus defines PHP $_SERVER['HTTP_X_FORWARDED_FOR']
which xdebug prefers and uses as the client IP instead of $_SERVER['REMOTE_ADDR']
.
来源:https://stackoverflow.com/questions/30594804/remote-debugging-with-xdebug-from-inside-a-docker-container-does-not-work