Ich versuche, eine PHP -App zu debuggen, die auf Docker mit VSCode ausgeführt wird, jedoch ohne Erfolg.
In der Vergangenheit konnte ich meine PHP - Anwendungen mit VSCode, auf dem WAMP Server ausgeführt wird, problemlos debuggen, aber seit ich mit Docker arbeite, kann ich nicht, dass Debug funktioniert. Nach mehreren Online-Tutorials gesucht, einige Threads hier auf StackOverflow überprüft (zB: Docker und XDebug lesen keine Haltepunkte VSCode ), aber ich kann das immer noch nicht funktionieren.
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
}
]
Beim Debuggen der App wird kein Haltepunkt ausgelöst. Was mache ich falsch?
UPDATE: Basierend auf einigen Vorschlägen habe ich meine docker-compose.yml und meine launch.json-Dateien aktualisiert, aber nichts wurde geändert.
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 Debug Console:
<- launchResponse
Response {
seq: 0,
type: 'response',
request_seq: 2,
command: 'launch',
success: true }
UPDATE # 2: Entfernte den Xdebug-Port (9000) aus den Docker-Compose.yml-Einstellungen. Hier ist das xdebug-Protokollergebnis:
Geöffnet am: 2018-09-30 22:21:09 I: Verbindung zu konfiguriert Adresse/Port: Host.docker.internal: 9000. E: Zeitüberschreitung beim Verbinden mit Client (Wartezeit: 200 ms). :-( Log geschlossen am 30.08.2010 um 22:21:09 Uhr
Protokoll geöffnet am: 2018-09-30 22:21:17 I: Verbindung zu konfiguriert Adresse/Port: Host.docker.internal: 9000. E: Zeitüberschreitung beim Verbinden mit Client (Wartezeit: 200 ms). :-( Fenster geschlossen am 20.08.2008, 22:21:17
Protokoll geöffnet am: 2018-09-30 22:21:18 I: Verbindung zu konfiguriert Adresse/Port: Host.docker.internal: 9000. E: Zeitüberschreitung beim Verbinden mit Client (Wartezeit: 200 ms). :-( Log geschlossen am 30.08.2008 um 22:21:18 Uhr
Protokoll geöffnet am: 2018-09-30 22:21:18 I: Verbindung zu konfiguriert Adresse/Port: Host.docker.internal: 9000. E: Zeitüberschreitung beim Verbinden mit Client (Wartezeit: 200 ms). :-( Log geschlossen am 30.08.2008 um 22:21:18
Noch mehr Vorschläge?
UPDATE # 3: Mein Problem wurde mit den folgenden Einstellungen behoben:
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
Hat mein Problem mit den folgenden Einstellungen gelöst:
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
ihnen fehlt Port :9000
(oder :9001
) im docker-compose.yml
,
die verbindbar sein muss, damit sich die IDE von außen verbinden kann.
für VSCode ist möglicherweise die Erweiterung PHP Debug erforderlich, um mit xdebug
zu interagieren.
die Standardeinstellung launch.json
verwendet port:
9000
nur einmal - und hat 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
}
]
}
siehe auch vscode-php-debug und Starten des Debuggers .