Xdebug не может подключиться к хосту Docker
Я только что установил Docker на своей машине и у меня все установки в Nginx/PHP7 (FPM)/MySQL работают нормально, но, установив Xdebug в контейнер PHP, я не могу заставить его подключиться обратно к PHPStorm на моей хост-машине.
Вот мой конфиг PHP Xdebug...
zend_extension=/usr/local/lib/php/extensions/no-debug-non-zts-
20151012/xdebug.so
xdebug.remote_log=/usr/local/var/log/xdebug.log
xdebug.remote_enable=1
xdebug.remote_host=192.168.99.1
xdebug.remote_port=9000
xdebug.remote_connect_back=1
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_autostart=true
При просмотре с установленным файлом cookie Xdebug для контейнера не запрашивается соединение. Если я просматриваю локально размещенный сайт, он есть, поэтому я знаю, что PHPStorm правильно слушает.
На локальной машине я могу telnet к порту 9000…
$ telnet 192.168.99.1 9000
Trying 192.168.99.1...
Connected to 192.168.99.1.
Escape character is '^]'.
^]
telnet> quit
Connection closed.
… Однако я не могу ни с ВМ boot2docker, ни с контейнера. Когда я пытаюсь это просто сидит там, ничего не делая. Однако и виртуальная машина, и контейнер могут нормально пропинговать хост-компьютер.
Я пытался отключить брандмауэр моего Mac, но все равно не радуюсь.
Я не совсем уверен, как отключить брандмауэр на виртуальной машине boot2docker.
Любое понимание того, почему это не сработает, будет приветствоваться. Заранее спасибо.
5 ответов
Xdebug рекомендовал конфигурацию внутри контейнера:
zend_extension = xdebug.so
xdebug.remote_enable = 1
xdebug.remote_connect_back = 0
xdebug.remote_host = docker.for.mac.localhost
xdebug.remote_port = 9000
xdebug.remote_handler = dbgp
xdebug.remote_mode = req
xdebug.remote_autostart = 1
xdebug.idekey = PHPSTORM
Начиная с Docker-17.06, вы можете получить доступ к службам, размещенным на Mac внутри Container, через статическое имя хоста: docker.for.mac.localhost
ХОЧУ ПОДКЛЮЧИТЬ ОТ КОНТЕЙНЕРА К СЕРВИСУ НА ХОЗЯЙСТВЕ?
У Mac есть изменяющийся IP-адрес (или его нет, если у вас нет доступа к сети). Начиная с 17.06, мы рекомендуем подключаться к специальному DNS-имени только для Mac с именем docker.for.mac.localhost, которое разрешает внутренний IP-адрес, используемый хостом.
Я решил это, изменив client_port на что-то другое, кроме 9000, потому что на моем Mac уже был php-fpm, прослушивающий порт 9000.
Я использовал это, чтобы увидеть, какие порты были указаны в списке и чем:
sudo lsof -nP -iTCP -sTCP:LISTEN
Это все, что мне нужно для Xdebug в моем php.ini внутри контейнера:
zend_extension=xdebug.so
xdebug.mode=debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9009
Затем установите порт отладки в PHPStorm в разделе Xdebug страницы отладки в настройках PHP также на 9009.
Потратив некоторое время, пытаясь решить эту проблему, я нашел решение. Меня устраивает. Вы должны добавить pathMappings на
launch.json
файл. Как это:
{
"version": "0.2.0",
"configurations": [
{
"name": "Listen for Xdebug",
"type": "php",
"request": "launch",
"port": 9003,
"pathMappings": {
"/var/www/html/": "${workspaceFolder}"
}
},
]
}
Вам нужно использовать сеть, которая соединена между вашим хостом Docker и вашим Mac. Делать ifconfig
на Mac и ищите локальный IP в других локальных сетях, например, 10.0.1.13
, (Особенности могут отличаться в зависимости от версии Docker, но это работает с Vagrant в качестве хоста Docker и должно работать для большинства виртуальных машин.)
это сработало для меня:
xdebug.idekey = "VSCODE"
xdebug.default_enable = 1
xdebug.remote_port = 9000
xdebug.remote_autostart = 1
xdebug.remote_enable = 1
xdebug.remote_handler =
dbgpir_debug.profiler =
/ www / html "
xdebug.remote_connect_back = 0
enter code here
xdebug.cli_color = 1
xdebug.var_display_max_depth = 10
xdebug.remote_host = "host.docker.internal"
Также мне пришлось удалить эти связанные с
xdebug переменные среды из docker-compose: XDEBUG_CONFIG: "remote_host = localhost"
PHP_IDE_CONFIG: "serverName = Docker"
из моего docker-compose. вот старая настройка для docker compose:
дайте мне знать, если возникнут вопросы :)