我怎样才能debugging我的docker容器与phpStorm

在下面的IP下,我的容器在我的Web浏览器中运行成功

http://192.168.99.100:32775

我也创build了一个卷来共享我的容器和我的文件系统之间的文件

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 

现在我安装xDebug成功在我的容器与以下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也被configuration

http://img.gdocker.com/php/xdebug.png

但我的断点在我的index.php被忽略? 我的错误是什么?

问题是在Sergey的帮助下解决的

我新的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" 

您的Docker容器无法使用IP 127.0.0.1查看您的PHP Storm IDE,通常,容器内的主机为172.17.42.1。 另外remote_connect_back可能无法正常工作。 尝试像这样设置它:

 xdebug.remote_host=172.17.42.1 xdebug.remote_connect_back=Off 

您可能需要寻找一个适当的方法来了解容器内的主机IP,172.17.42.1只是默认的,但并不总是这样。

它只是在容器内部执行:

 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 

然后,重新启动容器。

在运行Docker时,172.17.42.1是主机的默认IP地址。 您可以获取在容器中执行的主机的IP:

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

我发现更多的自动化解决scheme在我的入口点,我运行了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 

它采用主机的当前IP地址并replacexdebug.ini中的行,然后运行supervisord女巫启动所有的东西

我最初的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 

运行脚本后,我会得到这样的东西

 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 

其中172.17.0.1是我当前的主机IP