xdebug не работает в Docker для Mac
после того, как я переключился с Docker Machine на Docker для Mac xdebug перестала работать. Порт 9000 на хосте недоступен из контейнера с xdebug.
php.ini:
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.remote_host=172.18.0.1
xdebug.idekey=PHPSTORM
docker-compose.в формате YML:
version: '2'
services:
php:
image: <image name>
ports:
- 80:80
# - 9000:9000
volumes:
- .:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/php.ini
xdebug.log:
I: Checking remote connect back address.
I: Checking header 'HTTP_X_FORWARDED_FOR'.
I: Checking header 'REMOTE_ADDR'.
I: Remote address found, connecting to 172.18.0.1:9000.
E: Could not connect to client. :-(
как решить мою проблему ?
3 ответов
У меня такая же проблема. Это может быть связано с ограничениями docker в OSX. Смотрите эти ссылки.
https://docs.docker.com/docker-for-mac/networking/ https://forums.docker.com/t/explain-networking-known-limitations-explain-host/15205
также были предложены возможные обходные пути. Одним из них является создание устройства с новым ip (например, 10.254.254.254), которое возвращается к вам localhost. Когда вы затем используете этот ip как вместо адреса удаленного хоста, назначенного docker (либо 127.0.0.1, либо 172.17.0.2), он должен сделать трюк. Следуйте за этой ссылке для кодированного решения
измените docker-compose.yml к ниже.
вы захотите открыть порт 9000, а не привязывать. Также обновите свой xdebug ini до ip вашего хоста (mac), а не ip docker.
Я также добавил, Как вы можете подключить файл xdebug с вашего mac непосредственно к докеру, чтобы вы могли обновить его на лету. Это позволяет вам больше контроля, так как вам может потребоваться обновить свой ip-адрес на основе перехода от wifi к wifi. Свойство xdebug.remote_host= ip должен быть вашим ip локальной сети mac. Просто помните, если вы на apache, чтобы сделать service apache2 restart
или соответствующая команда для перезапуска сервера при каждом изменении ip-адреса.
version: '2'
services:
php:
image: <image name>
ports:
- 80:80
expose:
- "9000"
volumes:
- .:/var/www/html
- ./php.ini:/usr/local/etc/php/conf.d/php.inivolumes:
- ./20-xdebug.ini:/etc/php/7.1/cli/conf.d/20-xdebug.ini //obviously you would change this to your correct paths
- ./20-xdebug.ini:/etc/php/7.1/apache2/conf.d/20-xdebug.ini //obviously you would change this to your correct paths
# 20-xdebug.ini, this is how mine is setup.
zend_extension = /usr/lib/php/20160303/xdebug.so
xdebug.remote_enable=1
xdebug.remote_host=192.168.0.4 // Make sure you use your host (mac) local ip, not the ip of docker.
xdebug.remote_port=9000
xdebug.idekey = PHPSTORM
xdebug.remote_handler = dbgp
xdebug.remote_autostart = 1
xdebug.remote_log = /var/log/xdebug.log
я боролся с этим в течение некоторого времени, и я нашел более простое решение после прочтения официальной документации в https://docs.docker.com/docker-for-mac/networking/#httphttps-proxy-support Особенно в подрубрике:
Я ХОЧУ ПОДКЛЮЧИТЬСЯ ИЗ КОНТЕЙНЕРА К СЛУЖБЕ НА ХОСТЕ
хост имеет изменяющийся IP-адрес (или нет, если у вас нет сети доступ.) С 18.03 и далее наша рекомендация-подключиться к специальное DNS имя хоста.докер.внутренний, который разрешает к внутреннему IP-адрес, используемый хозяином. Это для целей развития и не работает в производственной среде за пределами Docker для Mac.
как только вы поймете это, вы можете установить remote_host
параметр host.docker.internal
в вашем php.ini внутри контейнера. Также не забудьте установить xdebug.remote_connect_back
до 0 настройки хоста не игнорируются:
xdebug.remote_port=9000
xdebug.idekey=PHPSTORM
xdebug.remote_log=/tmp/xdebug.log
xdebug.remote_host=host.docker.internal
xdebug.remote_enable=1
xdebug.remote_connect_back=0