Отладка PHP с помощью VSCode и Docker - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь отладить приложение PHP, работающее на Docker с VSCode, но безуспешно.

В прошлом я мог легко отлаживать свои приложения PHP с VSCode, на котором работал WAMP Server, но с тех пор, как я началработая с докером я не могу заставить работать отладку.Искал несколько учебных пособий онлайн, проверил некоторые темы здесь в StackOverflow (например: Docker и XDebug не читают точки останова 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: Удаленопорт Xdebug (9000) из настроек docker-compose.yml.Вот результат журнала 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

Есть еще предложения?

ОБНОВЛЕНИЕ № 3: Решил мою проблему, используя следующие настройки:

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

Ответы [ 2 ]

0 голосов
/ 14 октября 2018

Удалось решить мою проблему со следующими настройками:

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
0 голосов
/ 30 сентября 2018

у вас отсутствует порт :9000 (или :9001) в docker-compose.yml,

, который должен быть подключаемым для IDE для подключения извне.

дляVSCode расширение PHP Debug может потребоваться для взаимодействия с xdebug.

по умолчанию launch.json использует port: 9000 только один раз - и имеет 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
    }
  ]
}

также см. vscode-php-debug и запуск отладчика .

...