Come posso eseguire il debug del mio contenitore docker con phpStorm

Sotto il seguente IP il mio contenitore ha successo nel mio web browser

http://192.168.99.100:32775

Ho anche creato un volume per condividere file tra il mio contenitore e il mio filesystem

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 

Ora installo anche xDebug riuscito nel mio contenitore con il seguente 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 è anche configurato

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

Ma i miei punti di interruzione nel mio index.php vengono ignorati? Qual è il mio errore?

Il problema è risolvere con l'aiuto di Sergey

Il mio nuovo 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" 

Il tuo contenitore Docker non riesce a vedere l'IDE Storm PHP con l'IP 127.0.0.1, tipicamente l'host è 172.17.42.1 da un contenitore. Anche il remote_connect_back non functionrà probabilmente. Provare a configurarlo in questo modo:

 xdebug.remote_host=172.17.42.1 xdebug.remote_connect_back=Off 

Potrebbe essere necessario cercare un modo corretto per conoscere l'IP dell'host nel tuo contenitore, 172.17.42.1 è solo l'impostazione predefinita, ma potrebbe non essere sempre così.

Ha funzionato per me semplicemente eseguendo all'interno del contenitore:

 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 

E poi, riavviando il contenitore.

172.17.42.1 è l'IP predefinito dell'host, quando si esegue Docker. È ansible get l'IP del tuo host eseguendo nel contenitore:

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

Ho trovato più soluzione automatica Nel mio ENTRYPOINT ho eseguito lo 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 

Prende l'indirizzo IP corrente della macchina host e sostituisce la row in xdebug.ini, quindi eseguendo la strega supervisord inizia tutte le cose

Il mio iniziale xdebug.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 

Dopo aver eseguito lo script, avrò qualcosa di simile

 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 

Dove 172.17.0.1 è il mio attuale host ip