J'essaie de déboguer une application PHP s'exécutant sur Docker avec VSCode, mais sans succès.
Dans le passé, j’étais capable de déboguer facilement mes applications PHP avec VSCode exécutant WAMP Server, mais depuis que je travaille avec Docker, je ne parviens pas à faire fonctionner le débogage. J'ai cherché plusieurs tutoriels en ligne, vérifié quelques discussions ici sur StackOverflow (ex .: Docker et XDebug ne lisant pas les points d'arrêt VSCode ), mais je ne parviens toujours pas à obtenir ce fonctionnement.
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
}
]
Lorsque je débogue l'application, aucun point d'arrêt n'est déclenché. Qu'est-ce que je fais mal?
UPDATE: Sur la base de certaines suggestions, j'ai mis à jour mon fichier docker-compose.yml et mes fichiers launch.json, mais rien n'a changé.
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
}
]
Console de débogage VSCode:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true }
UPDATE # 2: Suppression du port Xdebug (9000) des paramètres docker-compose.yml. Voici le résultat du journal xdebug:
Journal ouvert à 2018-09-30 22:21:09 I: Connexion à configuré adresse/port: Host.docker.internal: 9000. E: Time-out connexion à client (attendu: 200 ms). :-( Ouverture du journal au 2018-09-30 22:21:09
Journal ouvert à 2018-09-30 22:21:17 I: Connexion à configuré adresse/port: Host.docker.internal: 9000. E: Time-out connexion à client (attendu: 200 ms). :-( Ouverture du journal au 2018-09-30 22:21:17
Journal ouvert à 2018-09-30 22:21:18 I: Connexion à configuré adresse/port: Host.docker.internal: 9000. E: Time-out connexion à client (attendu: 200 ms). :-( Ouverture du journal au 2018-09-30 22:21:18
Journal ouvert à 2018-09-30 22:21:18 I: Connexion à configuré adresse/port: Host.docker.internal: 9000. E: Time-out connexion à client (attendu: 200 ms). :-( Ouverture du journal au 2018-09-30 22:21:18
Des suggestions supplémentaires?
UPDATE # 3: résolution du problème en utilisant les paramètres suivants:
launch.json
{
"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"
]
},
]
}
xdebug.ini
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
J'ai réussi à résoudre mon problème avec les paramètres suivants:
launch.json
{
"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"
]
},
]
}
xdebug.ini
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
le port :9000
(ou :9001
) est manquant dans le docker-compose.yml
,
qui doit être connectable, pour que le IDE se connecte de l’extérieur.
pour VSCode, l’extension PHP Debug peut être nécessaire pour interagir avec xdebug
.
la valeur par défaut launch.json
utilise uniquement port:
9000
une seule fois - et a log:
true
.
{
"configurations": [{
"name": "Listen for XDebug",
"type": "php",
"request": "launch",
"port": 9000,
"log": true
}, {
"name": "Launch",
"request": "launch",
"type": "php",
"program": "${file}",
"cwd": "${workspaceRoot}",
"externalConsole": false
}
]
}
voir aussi vscode-php-debug et démarrer le débogueur .