2015-06-05 15 views
22

Unter dem folgende IP meiner Container laufen erfolgreich in meinem Web-BrowserWie kann ich debuggen meine Docker-Container mit PhpStorm

http://192.168.99.100:32775

Ich habe auch einen Volume erstellen, Dateien zwischen meinem Container und meinem Dateisystem zu teilen

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 

Jetzt installiere ich XDebug auch erfolgreich in meinem Behälter mit den 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 auch

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

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

Problem ist mit Hilfe von Sergey lösen

Mein neues 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" 
+2

Vielleicht sollten Sie setzen Ihre Host-Maschine in' xdebug.remote_host' ip ? –

+0

thx, ich lösche xdebug.remote_host = 127.0.0.1 und setze xdebug.remote_connect_back = On – codinglimo

+0

Es könnte für jemand anderen nützlich sein, aber ich musste auch Pfadzuordnungen einrichten, um die lokalen Dateien an die Stelle im Container zu mappen. Einstellungen> Sprachen & Frameworks> PHP> Server und dann einen neuen hinzufügen – mickadoo

Antwort

16

Ihr Docker Container können Sie Ihre PHP-Sturm IDE mit der IP 127.0.0.1 nicht sehen, in der Regel der Host ist 172.17.42.1 aus einem Container. Auch remote_connect_back wird wahrscheinlich nicht gut funktionieren. Versuchen Sie es nach oben, wie Sie diese Einstellung:

xdebug.remote_host=172.17.42.1 
xdebug.remote_connect_back=Off 

Unter Umständen müssen Sie für eine richtige Art und Weise suchen die Host-IP in Ihrem Behälter zu wissen, 172.17.42.1 nur der Standard ist, aber es ist vielleicht nicht immer das sein.

+4

Geben Sie den Container mit PHP-End-Typ an der CLI ein: '/ sbin/ip route | awk '/ default/{print $ 3}'' – phpguru

+1

Mein Standardwert war 172.17.0.1 – peter

5

Er arbeitete für mich nur im Inneren des Behälters Ausführung:

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 Behälter neu zu starten.

172.17.42.1 ist die Standard-IP des Hosts, wenn Docker ausgeführt wird. Sie können die IP-Adresse Ihres Host erhalten in dem Behälter Ausführung:

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

anstelle des obigen Befehls können Sie auch ifconfig docker ausführen Daemon läuft. docker0 inet Adr: 172.17.0.1 (ein Beispiel) – yuklia

0

ich mehr automatisierte Lösung In meinem ENTRYPOINT fand ich das startServices Skript lief

#!/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-Maschine und ersetzt die Zeile in xdebug.ini, dann die supervisord Hexe läuft die ganze Zeug

Mein ersten xdebug.ini

Start
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 

das Skripts nach dem Ausführen, i `ll so etwas wie diese

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 

erhalten Wo 172.17.0.1 mein aktueller Host-IP ist

+0

Diese Lösung hat nicht für mich funktioniert. –

+0

Die Remote IP (172.17.0.1) funktioniert auch nicht für mich. Ich kann xdebug mit meiner IDE kommunizieren, wenn ich remote_host auf die IP meines virtuellen Docker-Ethernet-Adapters einstelle. Könnte auf dieses Problem bezogen werden https://github.com/docker/for-win/issues/37 – georaldc

+0

Sie sollten nicht die IP-172.17.0.1 hartcodieren, Eintrag Skript wird den Trick für Sie tun, wird es dauern Korrigieren Sie die IP-Adresse automatisch. Ich habe diese Lösung auf ungefähr 10 Computern überprüft und die ganze Zeit funktioniert es perfekt –