Как подружить Windows 10 + Docker + PhpStorm + Xdebug?

Добрый день!

Второй день мучаюсь с настройкой Xdebug'a.
ОС Windows 10, для запуска приложений использую Docker ("Docker for Windows").
Появилась необходимость отладить PHP-код в PhpStorm. И уперся в настройку всего этого дела.

Моя текущая настройка.
В docker-файле для "php-контейнера" устанавливаю xdebug:
pecl install xdebug; \
docker-php-ext-enable xdebug; \
echo "error_reporting=E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_startup_errors=On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "display_errors=On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_host=10.0.75.1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \

^ в качестве "remote_host" беру IPv4-адрес для "Адаптер Ethernet vEthernet (DockerNAT)" (вроде как для винды надо делать так). В качестве "remote_port" беру 9001, т.к. fastcgi занимает 9000 порт.

В PhpStorm'e вроде как тоже все логично настроено:
5c7bb7ad3f0b3563952812.png
-
5c7bb805daee9174167488.png
^ "DBGp Proxy" не использую, "ide key" указываю в настройках remote debugger'a (= PHPSTORM).

По итогу запускаю xdebug, открываю нужный URL... а в консоли вижу только такое:
"Waiting for incoming connection with ide key 'PHPSTORM".

P.S.:
Спец. расширение для хрома для xdebug'a тоже стоит, не помогает.

Будьте добры, подскажите, может я какой-то очевидный косяк не вижу/не беру во внимание?
  • Вопрос задан
  • 4604 просмотра
Пригласить эксперта
Ответы на вопрос 5
denisbondar
@denisbondar
Python, PHP developer
Добрый день.
Я у себя в блоге недавно в деталях описал весь этот процесс. Работает гарантировано.
Добро пожаловать!

https://blog.denisbondar.com/post/phpstorm_docker_...
Ответ написан
@MKMatriX
Дело в том как устроена сеть для докера под виндой, увы нужно указать айпишник виртуального адаптера докера, иначе никакого дебага.
https://devilbox.readthedocs.io/en/latest/intermed...
Как пример
Ответ написан
Комментировать
aceventura
@aceventura
программист
Уровень tcp/ip
1. Убедиться, что шторм слушает соединения на порт (значок listen debug connection зелёный)
2. Убедиться, что из докера можно достучаться до "родительского" хоста по адресу, который вы указали в конфигурации. telnet ip port.
3. Включить логирование xdebug и посмотреть, что будет в логе
Remote_autostart не нужен, выключите.
Ответ написан
Комментировать
YekitKsv
@YekitKsv
Developer
Уберите remote_host и поставьте connect_back в 1.
Также проверьте, что прокинут в хост не только порт 9000, но и 9001.
Когда заработает, не забудьте в phpstorm в настройках xdebug снять галки "force break at first line..."
remote_autostart нужен для того, чтобы не писать в каждый запрос куку для начала сеанса дебага.
Ответ написан
Комментировать
@MadridianFox
Web-программист, многостаночник
Я для себя определил универсальный подход для отладки в любом сетевом окружении.
В простейшем случае, когда разработчик один, а сервер за NAT, надо на сервер прокинуть порт через ssh.
ssh user@host -R 9000 localhost:9000
При этом в php.ini xdebug надо настроить чтобы он коннектился на localhost:9000.

Когда разработчиков много, я использую модифицированный dbgp прокси.
https://github.com/MadridianFox/php-xdebug-proxy
Если он стоит на том же сервере что и php, настройки xdebug те же. Прокси слушает 9000 порт. Каждый разработчик выбирает себе уникальный порт и прокидывает его по ssh на сервер. Так же надо обратно прокинуть 9001 порт чтобы зарегистрировать свой idekey в прокси.
ssh user@host -R 9002 localhost:9002 -L 9001 localhost:9001

И самое главное - при регистрации своего idekey через шторм в поле idekey надо написать myidekey:9002
В этом же окне порт прокси - 9001, хост прокси - localhost.

В настройках шторма указываем что для отладки надо слушать 9002 порт.

В браузере, не важно, используете вы расширение или прописываете XDEBUG_SESSION_START, надо указать myidekey без порта!

В случае с докером вы можете либо добавить ssh сервер в контейнер с самим php, либо поднять дополнительный ssh контейнер. При единоличной разработке этого достаточно. Просто в зависимости от размещения ssh прописываете разные хосты в xdebug. Прокидывает туда порт.

Если разработчиков больше одного - выделяете контейнер с ssh + dbgp прокси и каждый разработчик прокидывает туда свой порт.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы