如何使用phpStorm调试docker容器

如何使用phpStorm调试docker容器,php,docker,phpstorm,xdebug,boot2docker,Php,Docker,Phpstorm,Xdebug,Boot2docker,在以下IP下,我的容器在我的Webbrowser中成功运行 我还创建了一个卷,用于在容器和文件系统之间共享文件 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.ini在我的容器中成功地安装了xDebug zend_exten

在以下IP下,我的容器在我的Webbrowser中成功运行

我还创建了一个卷,用于在容器和文件系统之间共享文件

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.ini在我的容器中成功地安装了xDebug

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"
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"
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
还配置了PHPStorm

但是我的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_handler=dbgp
xdebug.profiler_enable=0
xdebug.profiler_output_dir="/temp/profiledir"
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"
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

Docker容器无法看到IP为127.0.0.1的PHP Storm IDE,通常容器中的主机是172.17.42.1。另外,远程连接可能无法正常工作。尝试如下设置:

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
/sbin/ip route|awk '/default/ { print $3 }'
然后,重新启动容器

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

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
/sbin/ip route|awk '/default/ { print $3 }'

我找到了更自动化的解决方案 在我的入口点,我运行了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地址并替换xdebug.ini中的行,然后运行supervisord开关启动所有内容

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

也许你应该在
xdebug.remote\u host
中设置你的主机ip?thx,我删除xdebug.remote\u host=127.0.0.1并设置xdebug.remote\u connect\u back=OnIt它可能对其他人有用,但我还必须设置路径映射,将本地文件映射到它们在容器中的安装位置。设置>语言和框架>PHP>服务器,然后添加一个新的容器。您如何运行您的容器?我主要对端口映射感兴趣。您是否将容器的端口9000映射到外部端口9000(
-p9000:9000
)?输入运行PHP的容器并在CLI处键入此命令:
/sbin/ip route | awk'/default/{print$3}
我的默认值是172.17.0.1除了上述命令之外,您还可以在docker守护程序运行的位置运行ifconfig。docker0 inet addr:172.17.0.1(示例)远程IP(172.17.0.1)对我也不起作用。如果我将远程主机设置为Docker虚拟以太网适配器的IP,我可以让xdebug与IDE通信。可能与此问题有关,您不应硬编码ip 172.17.0.1,输入脚本将为您完成此任务,它将自动获取正确的ip地址。我已经在大约10台计算机上检查了这个解决方案,并且一直都能很好地工作