Ric*_*cky 5 php docker visual-studio-code vscode-debugger wsl-2
几年来,我一直在 Windows 中使用 VSCode + Docker,并且设法拥有一个完全正常工作的开发环境,没有任何问题。
最近我用 WSL2 设置了一个新的开发环境。将我所有的项目、库、CLI 等移动到 WSL,使用带有 WSL2 容器的 Docker Windows 和 Windows 上的 VSCode 远程连接到 WSL。一切都非常顺利,我喜欢我可以将一切分开的事实。
但是最近我遇到了一个我无法解决的问题,我失去了调试 PHP 文件的能力。我正在使用 VSCode 远程 WSL 扩展来处理 WSL 内的项目,但是当我尝试调试时,没有任何反应。
对于我使用的每个开发环境(Windows、MacOS 和 WSL),我的 VSCode 中都有树调试设置。除 WSL 外的所有工作。当我尝试使用 WSL 进行调试时,实际上什么也没发生,没有输出错误,没有调试控制台信息,什么都没有...
这是我的 VSCode 调试设置:
{
"version": "0.2.0",
"configurations": [{
"name": "Listen for XDebug Win10",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "\\\\wsl$\\Ubuntu\\home\\ubuntu\\PROJECTS\\project-a\\api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
{
"name": "Listen for XDebug MacOS",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "/Users/ricky/PROJECTS/project-a/api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
{
"name": "Listen for XDebug WSL",
"type": "php",
"request": "launch",
"port": 9000,
"log": true,
"externalConsole": false,
"pathMappings": {
"/var/www/project-a/api": "/home/ubuntu/PROJECTS/project-a/api",
},
"ignore": [
"**/vendor/**/*.php"
]
},
]
}
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?关于如何解决这个问题的任何想法?
### 更新:我已将原始正确答案更改为新答案。尽管@romain-prevost 的解决方案奏效了,但我认为@dark 的方法要简单得多:)
小智 9
我也一直在使用 WSL2 在 Docker 中使用 PHP xdebug。这一切都归结为远程主机。
你的 xdebug 配置是php.ini什么?您应该设置xdebug.remote_host为您的 WSL2 本地 IP 地址(您可以在终端中使用 获得hostame -I)。
我曾多次尝试在我的 Docker 中设置远程主机 IP 地址——编写一个文件以在启动时传递给容器——但它总是失败。多亏了另一个 StackOverflow 答案,我也有一个解决方案:
在 WSL2 中,为.bashrc文件中的本地 IP 设置一个环境变量。我已将我的设置为
export IP=$(hostname -I)
Run Code Online (Sandbox Code Playgroud)
在 PHP 服务的 Docker 撰写文件中,将 IP 地址作为带有extra_hosts密钥的新主机传递。对于 compose v3.2,它是
extra_hosts:
- "docker.host:${IP}"
Run Code Online (Sandbox Code Playgroud)
您可以在此处查看其他撰写版本:https : //docs.docker.com/compose/compose-file/
最后,编辑php.inixdebug的文件以包含以下行:
xdebug.remote_host=docker.host
Run Code Online (Sandbox Code Playgroud)
您的容器将能够访问 WSL2 发行版docker.host并连接到您为 xdebug 设置的端口。
这个我花了很多时间才弄明白,主要是因为WSL2前几天正式发布了,关于它的指南并不多。最后并没有那么复杂,但是没有extra_hosts密钥我无法使 WSL2 IP 地址工作。它在容器和 xdebug 配置中,但我总是收到关于资源不可用的错误,所以不要忘记它
忘记其他答案。他们正在工作,但在我看来太复杂了。
问题是,您无法连接到 xdebug。
解决方案是告诉 xdebug 将 remote_host 设置为host.docker.internal. 本地主机可以使用那里的所有内容。现在,您只需在 Visual Studio Code 中localhost通过hostname.
等等。现在,您可以在 phpunit 测试中或命令行脚本中调试由浏览器调用的内容。
启动文件
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"pathMappings": {
"/var/www/html/": "${workspaceRoot}"
},
"hostname": "localhost"
}
]
}
Run Code Online (Sandbox Code Playgroud)
配置文件
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9000
Run Code Online (Sandbox Code Playgroud)
启动文件
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9000
Run Code Online (Sandbox Code Playgroud)
配置文件
[XDebug]
xdebug.mode = develop
xdebug.start_with_request = yes
xdebug.client_host = host.docker.internal
xdebug.client_port = 9003
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4301 次 |
| 最近记录: |