it-swarm.com.de

Wie kann ich meinen Docker-Container mit phpStorm debuggen?

Unter der folgenden IP-Adresse läuft mein Container erfolgreich in meinem Webbrowser

http://192.168.99.100:32775

Ich habe auch ein Volume erstellt, um Dateien zwischen meinem Container und meinem Dateisystem freizugeben

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

Nun installiere ich auch xDebug erfolgreich in meinem Container mit der folgenden 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 ist ebenfalls konfiguriert

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

Aber meine Haltepunkte in meiner index.php werden ignoriert? Was ist mein Fehler?

Problem wird mit Hilfe von Sergey gelöst

Meine neue 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

Ihr Docker-Container kann Ihren PHP Storm IDE mit der IP-Adresse 127.0.0.1 nicht sehen. Der Host befindet sich normalerweise 172.17.42.1 aus einem Container. Auch remote_connect_back wird wahrscheinlich nicht gut funktionieren. Versuchen Sie es so einzurichten:

xdebug.remote_Host=172.17.42.1 
xdebug.remote_connect_back=Off

Möglicherweise müssen Sie nach einer geeigneten Methode suchen, um die IP-Adresse des Hosts in Ihrem Container zu ermitteln. 172.17.42.1 ist nur die Standardeinstellung, kann jedoch nicht immer der Fall sein.

18
Nicolas Cohen

Es hat für mich funktioniert, nur innerhalb des Containers auszuführen:

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

Und dann den Container neu starten.

172.17.42.1 ist die Standard-IP des Hosts, wenn Docker ..__ ausgeführt wird. Sie können die IP-Adresse Ihres Hosts im Container erhalten:

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

Ich habe mehr automatisierte Lösung gefunden. In meinem ENTRYPOINT habe ich das startServices-Skript ausgeführt

#!/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

Es nimmt die aktuelle IP-Adresse des Host-Computers und ersetzt die Zeile in xdebug.ini. Anschließend wird der Supervisord ausgeführt, der den gesamten Vorgang startet

Meine ursprüngliche 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

Nach dem Ausführen des Skripts bekomme ich so etwas

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

Dabei ist 172.17.0.1 meine aktuelle Host-IP

0
Rodion Ivanov