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-адрес, используемый хостом.

см. https://docs.docker.com/docker-for-mac/networking/

Я решил это, изменив 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 herexdebug.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:

дайте мне знать, если возникнут вопросы :)

Другие вопросы по тегам