Cómo puedo depurar mi contenedor docker con PhpStorm


Bajo la siguiente IP mi contenedor se ejecuta correctamente en mi navegador web

Http://192.168.99.100:32775

También he creado un volumen para compartir archivos entre mi contenedor y mi sistema de archivos

docker run --name lampf -d -p 32775:80 -v /Users/sja/Sites/lamkepf2:/var/www/html --link=lampf_db:db codinglimo/apache_php540_gs_imgmck_pdflib9

Ahora instalo también xDebug correctamente en mi contenedor con el siguiente xdebug.ini

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"

xdebug.remote_enable=on
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"

PhpStorm también está configurado

Http://img2.picload.org/image/iowdpww/xdebug.png

Pero mis puntos de interrupción en mi índice.php son ignorado? ¿Cuál es mi error?

El problema se resuelve con la ayuda de Sergey

Mi nuevo xdebug.ini

zend_extension="/usr/local/lib/php/extensions/no-debug-non-zts-20100525/xdebug.so"

xdebug.remote_enable=on
#xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_connect_back=On
xdebug.remote_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"
Author: codinglimo, 2015-06-05

3 answers

Su contenedor Docker no puede ver su IDE PHP Storm con la IP 127.0.0.1, normalmente el host es 172.17.42.1 desde dentro de un contenedor. También remote_connect_back probablemente no funcionará bien. Intenta configurarlo así:

xdebug.remote_host=172.17.42.1 
xdebug.remote_connect_back=Off

Es posible que deba buscar una manera adecuada de conocer la IP del host dentro de su contenedor, 172.17.42.1 es solo el valor predeterminado, pero puede que no siempre sea eso.

 18
Author: Nicolas Cohen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-05 14:53:02

Funcionó para mí solo ejecutar dentro del contenedor:

pecl install -o -f xdebug \
&& rm -rf /tmp/pear \
&& echo "zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/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_host=172.17.42.1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_connect_back=On" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "memory_limit = 64M" > /usr/local/etc/php/conf.d/php.ini

Y luego, reiniciar el contenedor.

172.17.42.1 es la IP predeterminada del host cuando se ejecuta Docker. Puede obtener la IP de su host ejecutándose en el contenedor:

/sbin/ip route|awk '/default/ { print $3 }'
 5
Author: ignacio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-11-17 23:03:19

Encontré una solución más automatizada En mi ENTRYPOINT ejecuté el script startServices

#!/bin/bash
HOST_IP=`/sbin/ip route | awk '/default/ { print $3 }'`
head -n -1 /etc/php5/mods-available/xdebug.ini > /etc/php5/mods-available/xdebug.tmp
echo "xdebug.remote_host="$HOST_IP >> /etc/php5/mods-available/xdebug.tmp
rm /etc/php5/mods-available/xdebug.ini
mv /etc/php5/mods-available/xdebug.tmp /etc/php5/mods-available/xdebug.ini

/usr/bin/supervisord

Toma la dirección ip actual de la máquina host y reemplaza la línea en xdebug.ini, a continuación, la ejecución de la bruja supervisord está empezando todas las cosas

Mi xdebug inicial.ini

zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_host=127.0.0.1

Después de ejecutar el script, obtendré algo como esto

zend_extension=xdebug.so
[xdebug]
; priority=999
xdebug.remote_autostart=true
xdebug.remote_enable = On
xdebug.remote_connect_back = Off
xdebug.remote_port = 9000
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.var_display_max_data = 2048
xdebug.var_display_max_depth = 128
xdebug.max_nesting_level = 500
xdebug.remote_host=172.17.0.1

Donde 172.17.0.1 es mi ip de host actual

 0
Author: Rodion Ivanov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-07-18 18:53:12