[英]Xdebug Netbeans Php Docker
我通过http://dev.app/?XDEBUG_SESSION_START=netbeans-xdebug
通过浏览器开始,我能得到的最好是页面保留,执行停止,但 Netbeans 不会在断点处停止,而是一直在等待连接。 那是我在 127.0.0.1:10000 上的 Netbeans 中设置代理的时候。
将 docker 机器 192.168.99.100 的 ip 放在那里更符合逻辑,但是页面刚刚加载,没有任何停止(win 8.1 上的 docker 工具包)。 此外,当我在 Netbeans 中省略代理时,一切都不会停止。
当某事正在侦听 10000 执行停止时我放置断点但 Netbeans 正在等待连接。 Xdebug 已安装并列在php -v
和php -m
。我确实暴露了端口 10000。
调试器端口、项目 url 和会话 ID 在 Netbeans 中设置。
Xdebug文档说当您设置xdebug.remote_connect_back=1
您不需要指定远程主机。
zend_extension=xdebug.so
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_handler=dbgp
; port 9000 is used by php-fpm
xdebug.remote_port=10000
xdebug.remote_autostart=0
; no need for remote host
xdebug.remote_connect_back=1
xdebug.idekey="netbeans-xdebug"
docker-compose.yml
php-fpm:
build:
context: ./php-fpm
dockerfile: Dockerfile-70
volumes_from:
- application
expose:
- "9000"
- "10000"
ports:
- "10000:10000"
links:
- workspace
environment:
PHP_IDE_CONFIG: "serverName=dev.app"
nginx:
build: ./nginx
volumes_from:
- application
volumes:
- ./logs/nginx/:/var/log/nginx
ports:
- "80:80"
- "443:443"
links:
- php-fpm
编辑:这是我在 Netbeans 中收听 192.168.99.1:10000 时的 xdebug.log,执行已暂停但 nb 仍在等待连接。 Win 防火墙已禁用。 我确实从 nb 停止了调试。
Log opened at 2016-05-26 09:38:04
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 192.168.99.1:10000.
I: Connected to client. :-)
-> <init xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/dbgp/x
debug" fileuri="file:///var/www/laravel/public/index.php" language="PHP" xdebug:
language_version="7.0.6" protocol_version="1.0" appid="6" idekey="netbeans-xdebu
g"><engine version="2.4.0"><![CDATA[Xdebug]]></engine><author><![CDATA[Derick Re
thans]]></author><url><![CDATA[http://xdebug.org]]></url><copyright><![CDATA[Cop
yright (c) 2002-2016 by Derick Rethans]]></copyright></init>
-> <response xmlns="urn:debugger_protocol_v1" xmlns:xdebug="http://xdebug.org/db
gp/xdebug" status="stopping" reason="ok"></response>
Log closed at 2016-05-26 09:38:25
root@b42a5193d501:/tmp#
编辑2:
Xdebug 绑定在 vm 之外,php socket 确实连接了,这是关于 Netbeans 没有发送正确的数据。 Netbeans 中的路径映射。
想法如何调试? 线鲨?
当调试开始并且 Netbeans 正在等待连接时,这是 netstat
C:\Windows\System32>netstat -np TCP | find "10000"
TCP 192.168.99.1:10000 192.168.99.1:57084 ESTABLISHED
TCP 192.168.99.1:10000 192.168.99.100:55650 ESTABLISHED
TCP 192.168.99.1:57084 192.168.99.1:10000 ESTABLISHED
这是 vm 机器内的 netstat
docker@default:~$ sudo netstat -plnt | grep ':10000'
tcp 0 0 :::10000 :::* LISTEN
另外telnet ::1 10000
连接,而telnet 192.168.99.1 10000
或telnet 192.168.99.100 10000
没有,所以我想我找到了问题,docker vm 期望连接 :1 windows ip6 这很奇怪,因为我在整个过程中禁用了它?
我也在通过 Docker Compose 在容器内使用 Netbeans、php-fpm+nginx。 并让它发挥作用。 但我的主机操作系统是 linux (openSuse Tumbleweed)
在您的主机系统(运行 IDE 的地方)上,允许传入 TCP连接到 Netbeans 设置(黄色)中指定的端口。 想想防火墙、防病毒软件等。
确保 xdebug 安装在运行 php 的 Docker 容器中。 dockerfile 示例:
FROM php:7.3-fpm-alpine
RUN apk add --no-cache $PHPIZE_DEPS icu-dev \
&& docker-php-ext-install pdo_mysql intl \
&& pecl install xdebug-2.7.0RC2 \
&& docker-php-ext-enable xdebug \
&& touch /tmp/xdebub.log
确保指定版本的 xdebug 和 php 兼容。 你可以执行php -i | grep xde
php 容器内的php -i | grep xde
以检查一切正常并且启用了 xdebug。
以某种方式在带有 php 的容器内提供 xdebug 配置。 您可以将echo
添加到 dockerfile,或者在构建时将其从主机复制到容器。 我已经结束了这个:
xdebug.remote_enable=1
xdebug.remote_connect_back=1
xdebug.remote_port=9000
xdebug.profiler_enable=0
xdebug.remote_log="/tmp/xdebug.log"
在我的情况下,xdebug.idekey(图片上的红色高亮显示)由浏览器扩展通过 XDEBUG_SESSION cookie 传递。 直到我从 xdebug 的配置中删除remote_autostart
和default_enable
,它才起作用。
似乎xdebug.remote_connect_back=1
不适用于您的系统。 您可能需要将其设置为 0 并添加xdebug.remote_host=host.docker.internal
。 链接: 关于 macos , 关于 windows 。
在配置时,我多次遇到 IDE 阻塞端口或类似问题。 在主机的终端它看起来像
> sudo lsof -i -P -n | grep 9000
java 28134 username 214u IPv6 929551 0t0 TCP 172.20.10.1:9000->172.20.10.3:54104 (CLOSE_WAIT)
在这种情况下,IDE 重新启动会有所帮助。
在 OP 的示例中,无需从 php-fpm 容器或 9000 或 10000 公开任何端口。在 xdebug 会话中,php-fpm 进程连接到 IDE,因此 IDE 正在侦听端口,而不是 php-fpm。 另外这也不是php-fpm使用9000端口的问题,它在另一个接口上监听这个端口,不会和IDE冲突。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.