Php 带有虚拟机的端口9000上的XDebug-EADDRINUSE::9000

Php 带有虚拟机的端口9000上的XDebug-EADDRINUSE::9000,php,visual-studio-code,virtualbox,xdebug,Php,Visual Studio Code,Virtualbox,Xdebug,我正在VirtualBox虚拟机上运行Symfony应用程序。PHP正在使用XDebug运行,并且配置正确。我知道这一点,因为其他人已经设法使它与同一虚拟机的快照一起工作 当我尝试在VS代码XDebug中配置时,我使用以下launch.json { // Use IntelliSense to learn about possible attributes. // Hover to view descriptions of existing attributes. //

我正在VirtualBox虚拟机上运行Symfony应用程序。PHP正在使用XDebug运行,并且配置正确。我知道这一点,因为其他人已经设法使它与同一虚拟机的快照一起工作

当我尝试在VS代码XDebug中配置时,我使用以下launch.json

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "Listen for XDebug",
            "type": "php",
            "request": "launch",
            "port": 9000
        },
        {
            "name": "Launch currently open script",
            "type": "php",
            "request": "launch",
            "program": "${file}",
            "cwd": "${fileDirname}",
            "port": 9000
        }
    ]
}
但是,当我单击“开始调试:侦听XDebug”时,我得到以下错误:

错误:侦听EADDRINUSE::9000

我试图终止正在使用该端口的进程。。。令我惊讶的是,这就是我试图连接的虚拟机


在这个配置中我错过了什么?

您正在尝试在
launch.json
中执行
launch
操作,这将导致vscode尝试在端口9000上启动一个新的php实例

尝试将
启动
配置替换为
附加
配置


希望有帮助。

我自己差不多找到了答案

问题在于Virtualbox的配置


在网络设置中,存在端口9000的端口转发,这阻止了我的调试器在本地运行。一旦删除,它就可以正常工作。

端口9000通常用于其他应用程序(例如MacOsX上的本机apache)的默认配置,也包括VM、Docker容器等

可靠的解决方案是使用不同的端口。例如,9001:)

这意味着:

  • 将IDE xdebug配置从端口9000更新为9001
  • 增加 您的php.ini(xdebug.ini)行


此外,您还可以在MacOS上使用telnet等工具检查9000端口的使用情况。我们可以使用终端通过以下方式确定端口9000上打开的端口:

sudo lsof -nP -i4TCP:9000 | grep LISTEN
我们可以使用上面的sudo,这样我们就可以看到不属于登录帐户的进程

例如,当我执行上述操作时,我得到:

php-fpm 110 root    6u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm 261 _www    0u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
php-fpm 262 _www    0u  IPv4 0x5cb825c4aa80be09      0t0  TCP 127.0.0.1:9000 (LISTEN)
然后,我们可以使用以下命令结束进程:

sudo kill 110
然后我们将有端口空闲,这样我们就可以无冲突地启动Xdebug


这为我解决了问题。

在我的例子中,sonarqube服务器运行在9000上,所以我将xdebug设置为9002。

切换到9001端口或其他自由端口(在php.ini和您的编辑器中)。除此之外,该端口已被另一个应用程序使用(正如您所说的VirtualBox)。。因此,您必须首先进行配置…因为VSC无法在该端口上开始侦听,这确实是一个解决方案,但我不想更改VM,因为它来自我们共享的快照。我想知道为什么其他人没有这个问题,我也有。好吧——你需要调查一下VirtualBox在什么时候占用了9000个端口:使用
netstat
或类似工具,看看它在什么时候会被占用;一步一步地。可能是特定的VM实例,也可能是与Docker或php fpm相关的;或者可能是您的自定义设置等。另外,我不知道您在那里使用的是什么虚拟机……这个lsof命令有助于指出由brew服务启动的php fpm。我不能杀死-9只它们,而有了苏多它们会重新繁殖。不知道他们是从哪里来的,也许是安装了贴身男仆。我卸载了。谢谢你,伙计,这么多,我敢说是你残余地救了我,这个问题在互联网上似乎没有太多讨论。我对docker也有类似的问题,尽管这里似乎也缺少全局主机xdebug ip的docker配置,或者配置了连接回选项,这两个选项都可能阻止该功能FantomX1 17分钟前删除
sudo kill 110