2016-08-25 3 views
7

После того, как я переключился с Docker Machine на Docker для Mac, xdebug перестала работать. Порт 9000 на хосте недоступен из контейнера с xdebug.
php.ini:
xdebug не работает в Docker для Mac

xdebug.remote_enable=1 
xdebug.remote_port=9000 
xdebug.remote_host=172.18.0.1 
xdebug.idekey=PHPSTORM 

Докер-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. :-(

Как решить мою проблему?

ответ

7

У меня такая же проблема. Это может быть связано с ограничениями докеров в 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 как адрес удаленного хоста, а тот, который назначается докерером (127.0.0.1 или 172.17.0.2), должен делать трюк. Следуйте за this link для кодированного решения

+0

Tnaks !!! Это помогло мне! –

+3

Спасибо. Строка (https://gist.github.com/ralphschindler/535dc5916ccbd06f53c1b0ee5a868c93), которую вы опубликовали, работает отлично. –

1

Измените свой docker-compose.yml ниже.

Вы хотите открыть порт 9000, а не связывать его. Также обновите свой xdebug ini до ip вашего хоста (mac), а не ip docker.

Я также добавил, как вы можете смонтировать файл xdebug с вашего Mac непосредственно на докере, чтобы вы могли обновить его на лету. Это позволяет вам больше контролировать, так как вам, возможно, придется обновить свой ip на основе перехода от Wi-Fi к Wi-Fi. Xdebug.remote_host = 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 
Смежные вопросы