web-dev-qa-db-fra.com

Comment puis-je déboguer mon conteneur Docker avec phpStorm

Sous l'IP suivant, mon conteneur a été exécuté avec succès dans mon navigateur Web.

http://192.168.99.100:32775

J'ai également créé un volume pour partager des fichiers entre mon conteneur et mon système de fichiers

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

Maintenant, j'installe aussi xDebug avec succès dans mon conteneur avec le fichier xdebug.ini suivant

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 est également configuré

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

Mais mes points d'arrêt dans mon index.php sont ignorés? Quelle est mon erreur?

Le problème est résolu avec l'aide de Sergey

Mon nouveau 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"
23
codinglimo

Votre conteneur Docker ne peut pas voir votre PHP Storm IDE avec l’IP 127.0.0.1, généralement l’hôte est 172.17.42.1 depuis un conteneur. De plus, remote_connect_back ne fonctionnera probablement pas bien. Essayez de le configurer comme ceci:

xdebug.remote_Host=172.17.42.1 
xdebug.remote_connect_back=Off

Vous devrez peut-être rechercher un moyen approprié de connaître l'adresse IP de l'hôte dans votre conteneur. 172.17.42.1 n'est que l'adresse par défaut, mais il se peut que ce ne soit pas toujours le cas.

18
Nicolas Cohen

Cela a fonctionné pour moi juste d'exécuter à l'intérieur du conteneur:

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

Et ensuite, redémarrer le conteneur.

172.17.42.1 est l'adresse IP par défaut de l'hôte, lorsque vous exécutez Docker . Vous pouvez obtenir l'adresse IP de votre hôte s'exécutant dans le conteneur:

/sbin/ip route|awk '/default/ { print $3 }'
5
ignacio

J'ai trouvé une solution plus automatiséeDans mon ENTRYPOINT, j'ai exécuté le 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

Il prend l'adresse IP actuelle de la machine hôte et remplace la ligne dans xdebug.ini, puis lance le superviseur qui lance tout le matériel

Mon xdebug.ini initial

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

Après avoir exécuté le script, je vais obtenir quelque chose comme ça

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

Où 172.17.0.1 est mon hôte actuel

0
Rodion Ivanov