【发布时间】:2019-03-05 20:30:28
【问题描述】:
我正在尝试使用 VSCode 调试在 Docker 上运行的 PHP 应用程序,但没有成功。
过去,我可以使用运行 WAMP Server 的 VSCode 轻松调试我的 PHP 应用程序,但自从我开始使用 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 }
更新 #2: 从 docker-compose.yml 设置中删除了 Xdebug 端口 (9000)。这是 xdebug 日志结果:
日志于 2018-09-30 22:21:09 打开 I: 连接到配置 地址/端口:host.docker.internal:9000。 E:超时连接到 客户端(等待:200 毫秒)。 :-( 日志于 2018-09-30 22:21:09 关闭
日志于 2018-09-30 22:21:17 打开 I: 连接到配置 地址/端口:host.docker.internal:9000。 E:超时连接到 客户端(等待:200 毫秒)。 :-( 日志于 2018-09-30 22:21:17 关闭
日志于 2018-09-30 22:21:18 打开 I: 连接到配置 地址/端口:host.docker.internal:9000。 E:超时连接到 客户端(等待:200 毫秒)。 :-( 日志于 2018-09-30 22:21:18 关闭
日志于 2018-09-30 22:21:18 打开 I: 连接到配置 地址/端口:host.docker.internal:9000。 E:超时连接到 客户端(等待:200 毫秒)。 :-( 日志于 2018-09-30 22:21:18 关闭
还有什么建议吗?
【问题讨论】:
-
1) 那么.. Xdebug 日志对此有何评论?展示下。 2) 你的主机操作系统是什么?
-
@LazyOne 我在调试控制台中得到的唯一输出是:
-
No -- Xdebug 自己的日志,不是 VSCode。见xdebug.org/docs/all_settings#remote_log
-
从日志中可以看到..它无法与VSCode建立连接。可能是:1)错误的主机(但
host.docker.internal应该没问题)。也许尝试平台特定名称; 2)您主机操作系统上的防火墙(确保VSCode可以监听任何接口等); 3) VSCode 没有在监听(你没有指定你的主机操作系统......所以我不能建议具体的命令,但一般来说——netstat)。确保监听 TCP 9000 端口的是 VSCode; 4) Docker 网络(不允许连接离开 Docker 容器/网络)。 -
感谢 3 天以来一直在努力完成这项工作。
标签: php docker visual-studio-code docker-compose xdebug