Docker и XDebug не читают точки останова VSCode

Я использую XDebug с PHP версии 7.0. * В течение последних 6 месяцев на MAC, используя удаленную отладку в контейнер Docker.

Я использовал старую версию докера, которая использовала VirtualBox для виртуальной машины для докера, все работало нормально.

Недавно я обновил докер до версии 17.03.1, и у меня не было ничего, кроме проблем с xDebug. Я связался с создателем vscode-php-debug через проблему в его репозитории, и затем он посоветовал мне поднять эту проблему с помощью xdebug и / или docker.

Моя проблема в следующем:

XDebug запущен и работает с моим контейнером, журнал xdebug показывает, что он подключается к моей среде IDE, но он просто закрывает соединение, как если бы точек останова нет, когда у меня есть точки останова, установленные в VSCode.

Проблему, которую я опубликовал на vscode-php-debug, можно найти здесь

У которого есть копия моих журналов xDebug и журналов отладки VSCode ... Это показывает, что соединение установлено, но точки останова не сработали.

Я читал в нескольких блогах, что докеру теперь нужен петлевой IP-адрес, созданный для подключения к xdebug, чтобы работать, что я также пробовал и потерпел неудачу.

Мне на удивление сложно отлаживать без отладчика после столь долгого использования.

Я перепробовал много конфигураций, переустановил, перезагрузил, перестроил образы / контейнеры и даже безуспешно пробовал каналы irc docker и xdebug на freenode.


person Joshua Lawson    schedule 12.04.2017    source источник
comment
Есть ли шанс, что вы на Mac? Потому что есть некоторые проблемы с docker для Mac (версия сообщества) и xdebug. Я заставил его работать, выполняя команду при каждой перезагрузке.   -  person Bram    schedule 12.04.2017
comment
Да я на макинтоше   -  person Joshua Lawson    schedule 12.04.2017


Ответы (2)


РЕДАКТИРОВАТЬ-2 2018

Теперь значение remote_host можно изменить для поддержки всех платформ:

xdebug.remote_host = "host.docker.internal"

EDIT-1 2018. Исправление plist больше не требуется. Как указано в этой сути: https://gist.github.com/chadrien/c90927ec2d160ffea9c4#gistcomment-2398281 теперь вы можете использовать докер для внутреннего IP-адреса Mac.

[xdebug]
xdebug.remote_host = "docker.for.mac.host.internal"
xdebug.default_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 0
xdebug.remote_enable = 1
xdebug.remote_handler = "dbgp"
xdebug.remote_port = 9000
xdebug.idekey="PHPSTORM"

СТАРАЯ КОНФИГУРАЦИЯ

Поскольку вы используете докер на Mac, я публикую, как работает мое решение. Большая часть благодарностей принадлежит этому сообщению на форуме докеров.

Предполагая, что вы правильно установили xdebug, это моя конфигурация в php.ini.

[xdebug]
xdebug.remote_host=10.254.254.254
xdebug.remote_autostart=1
xdebug.idekey = PHPSTORM
xdebug.default_enable = 0
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.profiler_enable = 1

Вы можете протестировать свою конфигурацию, выполнив эту команду в своем терминале. sudo ifconfig en0 alias 10.254.254.254 255.255.255.0.

Если это работает, вы можете преобразовать его в файл plist и поместить в следующее место. /Library/LaunchDaemons/com.docker.xdebugFix.plist. Ниже вы найдете мою версию файла plist.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.docker.xdebugFix</string>
    <key>ProgramArguments</key>
    <array>
        <string>ifconfig</string>
        <string>en0</string>
        <string>alias</string>
        <string>10.254.254.254</string>
        <string>255.255.255.0</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
</dict>
</plist>

Примечание. Список будет работать только после перезагрузки вашего Mac.


Конфигурация PHPSTORM (также необходима после редактирования 2018 г.)

После этого я настроил свой PHP-шторм с таким отладочным сервером:  php storm config 1

php storm config 2

После этого мои точки останова работали, если вы используете Chrome, вам также нужно будет использовать расширение xdebug, но я уверен, что вы это знаете, поскольку использовали его в прошлом.

person Bram    schedule 12.04.2017
comment
Это процесс, который я уже пробовал ... безуспешно ... но я мог бы дать ему еще одну попытку сегодня снова - person Joshua Lawson; 13.04.2017
comment
К сожалению, это все еще не работает ... Я также пробовал использовать chrome xdebug ... XDebug сообщает, что соединение подключено, но нет точек останова, и оно даже не прерывается при запуске, если я установил это в своей IDE или расширении chromes xdebug .. .. - person Joshua Lawson; 13.04.2017
comment
Я обнаружил проблему, и это было связано с моей настройкой docker-compose.yml ... со старой версией докера, которая работала на VirtualBox, мне пришлось открыть порт контейнера 9000, чтобы xDebug мог использовать туннель для подключения к моему хост ... который с докером теперь вызывает конфликты ... Таким образом, приведенный выше ответ правильный, но примечание для всех, у кого DID есть порт 9000, открытый в их контейнере ... его больше не нужно открывать / перенаправлять - person Joshua Lawson; 13.04.2017
comment
@joshualawson Классно! Не стесняйтесь редактировать ответ и добавлять информацию docker-compose.yml. Рад, что ты это понял! - person Bram; 13.04.2017
comment
xdebug.idekey = VSCODE у меня тоже работал нормально - person Met Br; 25.07.2021

Проверьте свой docker-compose.yml

У меня была переменная окружения:

XDEBUG_CONFIG: remote_host=${LAN_IP}

который нужно было изменить на:

XDEBUG_CONFIG: client_host=${LAN_IP}

где LAN_IP определяется как IP-адрес вашей локальной сети в файле .env.

person Dieter Gribnitz    schedule 10.01.2021