我正在尝试使用VSCode调试在Docker上运行的PHP应用程序,但没有成功。
过去,我可以使用运行WAMP Server的VSCode轻松调试PHP应用程序,但是由于我开始使用Docker,所以无法调试。在网上搜索了几本教程,在StackOverflow上检查了一些线程,但是我仍然无法正常工作。
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文件,但没有任何更改。
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关闭
日志于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关闭
还有其他建议吗?
更新#3:使用以下设置解决了我的问题:
{ "version": "0.2.0", "configurations": [{ "name": "Listen for XDebug", "type": "php", "request": "launch", "port": 9000, "log": true, "externalConsole": false, "pathMappings": { "/srv/app/cms": "${workspaceRoot}/cms", }, "ignore": [ "**/vendor/**/*.php" ] }, ] }
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-20160303/xdebug.so xdebug.default_enable=1 xdebug.remote_enable=1 xdebug.remote_port=9000 xdebug.remote_handler=dbgp xdebug.remote_connect_back=0 xdebug.remote_host=host.docker.internal xdebug.idekey=VSCODE xdebug.remote_autostart=1 xdebug.remote_log=/usr/local/etc/php/xdebug.log
设法通过以下设置解决了我的问题: