我尝试使用VSCode调试一个在Docker上运行的PHP应用程序,但没有成功。
在过去,我可以很容易地调试我的PHP应用程序与VSCode运行WAMP服务器,但因为我开始与Docker工作,我无法得到调试工作。搜索了几个教程在线,检查了一些线程在这里的StackOverflow(例如:Docker and XDebug not reading breakpoints VSCode),但我仍然无法得到这个工作。
Dockerfile:
FROM php:7.1.8-apache
COPY /cms /srv/app/cms
COPY .docker/cms/vhosts/vhost.conf /etc/apache2/sites-available/cms.conf
COPY .docker/cms/vhosts/vhost-ssl.conf /etc/apache2/sites-available/cms-ssl.conf
COPY .docker/cms/vhosts/certificate.conf /etc/ssl/certs/certificate.conf
COPY .docker/cms/xdebug.ini /usr/local/etc/php/conf.d/xdebug.ini
WORKDIR /srv/app/cms
RUN docker-php-ext-install mbstring pdo pdo_mysql
RUN pecl install xdebug
RUN docker-php-ext-enable xdebug
RUN chown -R www-data:www-data /srv/app/cms
RUN openssl req -x509 -new -out /etc/ssl/certs/ssl-cert-cms.crt -config /etc/ssl/certs/certificate.conf
RUN a2ensite cms.conf
RUN a2ensite cms-ssl.conf
RUN a2enmod rewrite
RUN a2enmod ssl
字符串
xdebug.ini
[xdebug]
xdebug.default_enable=1
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_connect_back=0
xdebug.remote_host='host.docker.internal'
xdebug.idekey='VSCODE'
xdebug.remote_autostart=1
型
docker-compose.yml
version: '3.7'
services:
cms:
build:
context: .
dockerfile: .docker/cms/Dockerfile
image: php:7.1.8-apache
ports:
- 18080:80
- 14430:443
volumes:
- ./cms:/srv/app/cms
links:
- mysql
- redis
environment:
DB_HOST: mysql
VIRTUAL_HOST: my.app.localhost
PHP_EXTENSION_XDEBUG: 1
型
VSCode:launch.json
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"pathMappings": {
"/srv/app/cms": "${workspaceRoot}/my.app/cms",
},
"port": 9000
}, {
"name": "Launch currently open script",
"type": "php",
"request": "launch",
"program": "${file}",
"cwd": "${fileDirname}",
"port": 9000
}
]
型
当我调试应用程序时,没有触发断点。我做错了什么?
**更新:**根据一些建议,我更新了我的docker-compose.yml和launch.json文件,但没有任何变化。
docker-compose.yml
ports:
- 18080:80
- 14430:443
- 9000:9000 //added new xdebug default port
型
launch.json
"configurations": [
{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"pathMappings": {
"/srv/app/cms": "${workspaceRoot}/my.app/cms",
},
"port": 9000,
"log": true
}
]
型
VSCode控制台:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true }
型
**UPDATE #2:**从docker-compose.yml设置中删除了Xdebug端口(9000),下面是xdebug日志结果:
日志打开时间:2018-09-30 22:21:09 I:连接到配置的地址/端口:host.docker.internal:9000. E:连接到客户端超时(等待:200 ms):-(日志关闭时间:2018-09-30 22:21:09
日志打开时间:2018-09-30 22:21:17 I:连接到配置的地址/端口:host.docker.internal:9000. E:连接到客户端超时(等待:200 ms).:-(日志关闭时间:2018-09-30 22:21:17
日志打开时间:2018-09-30 22:21:18 I:连接到配置的地址/端口:host.docker.internal:9000. E:连接到客户端超时(等待:200 ms):-(日志关闭时间:2018-09-30 22:21:18
日志打开时间:2018-09-30 22:21:18 I:连接到配置的地址/端口:host.docker.internal:9000. E:连接到客户端超时(等待:200 ms):-(日志关闭时间:2018-09-30 22:21:18
还有什么建议吗
7条答案
按热度按时间yhqotfr81#
通过以下设置解决了我的问题:
launch.json
字符串
xdebug.ini
型
g6ll5ycj2#
自xdebug版本3以来,配置名称发生了重大变化。
我当前的工作dockerfile:
字符串
VSC调试配置:
型
更多信息:https://xdebug.org/docs/upgrade_guide
jexiocij3#
好吧,我已经尝试了所有以上的答案,花了几个小时,但没有成功,因为在所有以上的答案中,有些概念是不清楚的新x-debug用户就像我一样.我希望我会知道以下概念开始设置x-debugger之前,运行在docker容器或远程服务器上,与我的VS Code的PHP插件.我相信这将有助于寻找解决此类问题.
X-Cache设置
我不确定我的机器是否应该被视为客户端主机或服务器主机,虽然这是显而易见的,但当你花了几个小时进行配置时,简单的事情开始变得棘手。
xdebug.client_host
根据X-debug脚本:
此地址应该是
the address of the machine where your IDE or debugging client is listening for
传入调试连接。我认为,与上面的文字不需要解释.因此,设置它如下在我们的x-debug配置即. xdebug.ini:
字符串
xdebug.remote_host
这对我来说是一个有点棘手的配置。实际上,x-debug没有这样的配置,但我一直在思考它。:-)
PHP-SQL设置
主机名
我一直在使用不同的配置,除了这个(因为在这个线程中没有人提到这一点):-),没有成功。然后我重新探索了PHP的文档,并知道它必须设置为
localhost
在我的情况下,并给了它一个尝试,和繁荣!它的工作!型
端口
应该设置为与xdebug.client_port相同,默认值为9300。在上面的答案中重复提到。
pathMappings
这是另一个非常重要的配置,当尝试使用VS Code PHP插件设置Docker服务器时。它是一个对象,必须将您的本地目录结构Map到服务器/容器目录,即/home/user/proj/html:${workspaceRoot}。我不能进一步解释它,它确实为我工作,我在这里提到了它。如果有人解释它,我会很欢迎。
以下是我的最终设置:
x1c 0d1x的数据
的
希望这对你有帮助,并保存你的时间:-)
tkqqtvp14#
您在
docker-compose.yml
中缺少端口:9000
(或:9001
),它需要是可连接的,以便IDE从外部连接。
对于VSCode,PHP Debug扩展可能需要与
xdebug
交互。默认的
launch.json
只使用port:
9000
一次-并且有log:
true
。字符串
另请参阅vscode-php-debug和启动调试器。
kxkpmulp5#
对于在以下堆栈上运行的所有人:
docker/8.0/php.ini
字符串
.env
型
launch.json
型
eimct9ow6#
Symfony的XDEBUG v3示例
x1c 0d1x的数据
docker-compose.yml:
字符串
xdebug.ini
型
xdebug.ini for php:7.2-fpm-alpine3.8
型
配置与代码修改路径Map示例
launch.json:
型
ua4mk5z47#
VSCode中PHP的Xcode.exe,使用最低配置和默认设置
docker-compose.yml
或Dockerfile
中的任何端口Dockerfile
中安装并启用 * XPLAN *:字符串
./.vscode/launch.json
并找到您的调试配置文件,或创建一个pathMappings
/var/www/html
中home/user/Documents/myproject/public
${workspaceRoot}
替换home/user/Documents/myproject
。${workspaceRoot}/public
型