【问题标题】:How can I debug my docker container with phpStorm如何使用 phpStorm 调试我的 docker 容器
【发布时间】:2015-06-05 13:42:17
【问题描述】:

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

http://192.168.99.100:32775

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

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 也配置好了

http://img2.picload.org/image/iowdpww/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"

【问题讨论】:

  • 也许你应该在xdebug.remote_host中设置你的主机IP?
  • 谢谢,我删除 xdebug.remote_host=127.0.0.1 并设置 xdebug.remote_connect_back=On
  • 它可能对其他人有用,但我还必须设置路径映射以将本地文件映射到它们在容器中的安装位置。 Settings > Languages & Frameworks > PHP > Servers 然后添加一个新的
  • 你是如何运行你的容器的?我主要对端口映射感兴趣。是否将容器的 9000 端口映射到外部的 9000 端口(@98​​7654327@)?

标签: php docker phpstorm xdebug boot2docker


【解决方案1】:

您的 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 只是默认值,但可能并不总是这样。

【讨论】:

  • 进入运行 PHP 的容器 end 在 CLI 中输入:/sbin/ip route|awk '/default/ { print $3 }'
  • 我的默认是 172.17.0.1
【解决方案2】:

它对我来说只是在容器内执行:

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

然后,重新启动容器。

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

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

【讨论】:

  • 除了上面的命令,你还可以在运行 docker 守护进程的地方运行 ifconfig。 docker0 inet addr:172.17.0.1(一个例子)
【解决方案3】:

我找到了更自动化的解决方案 在我的 ENTRYPOINT 中,我运行了 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=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

【讨论】:

  • 远程 IP (172.17.0.1) 对我也不起作用。如果我将 remote_host 设置为我的 Docker 虚拟以太网适配器的 IP,我可以让 xdebug 与我的 IDE 通信。可能与这个问题有关github.com/docker/for-win/issues/37
  • 您不应该对 ip 172.17.0.1 进行硬编码,输入脚本会为您解决问题,它会自动获取正确的 ip 地址。我已经在大约 10 台计算机上检查了这个解决方案,并且一直运行良好
猜你喜欢
  • 1970-01-01
  • 2017-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
  • 1970-01-01
  • 2019-04-05
  • 2016-12-30
相关资源
最近更新 更多