webentwicklung-frage-antwort-db.com.de

Debuggen PHP mit VSCode und Docker

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
6
Ricky

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
1
Ricky

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 .

1
Martin Zeitler