[英]using XDebug in a Dockerized PHP on mac OS
我无法从 macOS 上的 Dockerized 容器中使用 Xdebug 进行调试。
我已经非常仔细地阅读了: XDebug 远程配置、 Nikita Nikitin 帖子以及 Stackoverflow 和 Github 上的所有建议解决方案。 我还是被屏蔽了。。
我可以连接到容器bash -c "clear && docker exec -it DockerizedSample sh"
它确认安装了 XDebug。
# php -m -c
[PHP Modules]
Core
...
xdebug
...
[Zend Modules]
Xdebug
它的配置似乎有效。
# tail /usr/local/etc/php/conf.d/xdebug.ini
xdebug.idekey=PHPSTORM
xdebug.remote_host=172.17.0.1
xdebug.remote_enable=1
xdebug.remote_mode=req
xdebug.remote_port=9000
xdebug.remote_autostart=0
xdebug.remote_connect_back=0
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20131226/xdebug.so
FROM bartlebys/php-apache-mongo:latest
MAINTAINER Benoit Pereira da Silva <https://pereira-da-silva.com>
COPY /html /var/www/html/
################################
## CONFIGURE AND ENABLE XDEBUG #
################################
#Erase the current Configuration of xdebug
RUN echo "" > /usr/local/etc/php/conf.d/xdebug.ini
#Configure XDEBUG
RUN HOST_IN_CONTAINER_IP=$(/sbin/ip route|awk '/default/ { print $3 }')\
&&echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_host=$HOST_IN_CONTAINER_IP" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_mode=req" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini\
&& echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/xdebug.ini
# Enable XDEBUG's extension
RUN echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" >> /usr/local/etc/php/conf.d/xdebug.ini
#!/bin/sh
# Stop the container
echo "Stop "
docker stop DockerizedSample
# Delete the container
echo "Remove "
docker rm DockerizedSample
# Delete the image if necessary
docker rmi dockerizedsampleimage:latest
# Build the youdubserver image
echo "Building with the current source"
docker build -t dockerizedsampleimage:latest .
# Run DockerizedSample container
echo "Run container "
# Run the container once.
# then grab the IP of the HOST in the container
# stop and relaunch with the good IP
docker run -d --name DockerizedSample dockerizedsampleimage
HOST_IN_CONTAINER_IP=$(docker exec DockerizedSample /sbin/ip route|awk '/default/ { print $3 }')
docker stop DockerizedSample
docker rm DockerizedSample
# Run the debuggable container
docker run -e PHP_IDE_CONFIG="serverName=Dockerized"\
-e XDEBUG_CONFIG="remote_host=$HOST_IN_CONTAINER_IP"\
-p 27017:27017 \
-p 8001:80\
-d --name DockerizedSample dockerizedsampleimage\
# Start mongod
echo "Start mongod "
docker exec DockerizedSample service mongod start
echo "IP in Docker Host"
echo "$HOST_IN_CONTAINER_IP"
echo "Local IP"
ipconfig getifaddr en0
# Open localhost in a browser on macOS
if [[ "$OSTYPE" =~ ^darwin ]];
then open http://localhost:8001/
fi;
./run.sh
构建映像(可能需要几分钟)并运行容器后,它应该在http://localhost:8001/上打开浏览器
自 Docker 18.03 发布以来,您的解决方案可以大大简化。
host.docker.internal
DNS 名称已可用于运行host.docker.internal
容器。 这些 DNS 条目包含 docker 主机的 IP 地址。
所以代替xdebug.remote_host=172.17.0.1
你可以做xdebug.remote_host=host.docker.internal
您还可以删除运行 docker 容器的 run 脚本部分,只是为了获取主机的 IP 地址。
基本上对于远程调试,扩展什么都不做,而是将 cookie XDEBUG_SESSION 设置为 idekey 的值。 在您的“复杂”情况下,我最好检查以下 4 件事,这是我首先想到的:
如果 php-fpm 在服务器端(使用 IDE 的那一侧)端口 #9000 被 php-fpm 占用,则 IDE 将无法开始侦听传入连接。 9000 是 fpm 的默认端口,这经常成为一个常见的错误。 这就是我使用端口 #10000 的原因。
PHP_IDE_CONFIG 在这里不是环境变量。 这实际上是 nginx 配置的fastcgi_param指令的参数。
使用 xdebug.remote_log=/path/to/xdebug_remote.log
我个人更喜欢使用旧软件。 所以我在这里不是一个好帮手,但据我所知 Phpstorm 现在使用不同的配置进行远程调试。
我终于找到了解决方案。它不是那么复杂。 我已经使用“telnet”来确定容器是否能够访问 9000 上的主机。但事实并非如此。 混乱来自远程主机 IP。 您必须使用您的本地主机 IP!!!
HOST_IP=$(ifconfig en0 | grep inet | grep -v inet6 | awk '{print $2}')
docker run -e PHP_IDE_CONFIG="serverName=DockerLocal"\
-e XDEBUG_CONFIG="idekey=PHPSTORM"\
-e XDEBUG_CONFIG="remote_host=$HOST_IP"\
-p 27017:27017 \
-p 8001:80\
-d --name DockerizedSample dockerizedsampleimage
查看hub.docker.com上的详细信息或直接在Bartleby 的 Php-Apache-Mongo 的 github 存储库上查看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.