Using xdebug through Docker container in PhpStorm

a 夏天 提交于 2019-12-10 15:46:14

问题


I've read some posts about this but none helped in my case or simply overlooked the missing piece.

I cannot get xdebug to work on PhpStorm using a Docker container.

Docker-compose.yml

version: '2'

services:
  web:
    image: nginx:latest
    volumes:
    - .:/usr/share/nginx/html
    - ./nginx/nginx.conf:/etc/nginx/nginx.conf
    - ./nginx/logs:/var/logs/nginx
    - ./nginx/site-enabled/default.conf:/etc/nginx/sites-enabled/default.conf
    ports:
    - "80:80"
    depends_on:
    - php

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 1234
      MYSQL_DATABASE: local_db
      MYSQL_USER: root
      MYSQL_PASSWORD: 1234
    ports:
    - "3306:3306"

  php:
    build: images/php
    volumes:
    - .:/usr/share/nginx/html
    - ./config/docker/php/php.ini:/usr/local/etc/php/php.ini
    - ./config/docker/php/ext-xdebug.ini:/usr/local/etc/php/conf.d/ext-xdebug.ini
    - ./config/docker/php/php-fpm.conf:/usr/local/etc/php-fpm.conf
    user: www-data
    depends_on:
    - db

config/docker/php/ext-xdebug.ini

zend_extension="/usr/lib/php7/xdebug.so"
xdebug.remote_enable=1
xdebug.remote_port=9000
xdebug.overload_var_dump=1
xdebug.default_enable=1
xdebug.remote_autostart=1
xdebug.idekey=PHPSTORM
xdebug.remote_connect_back=1
xdebug.remote_host=172.20.0.1 # ip of host inside docker container
xdebug.remote_log=/usr/share/nginx/html/xdebug.log

error from xdebug.log

Log opened at 2017-05-31 11:01:14
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.20.0.1:9000.
W: Creating socket for '172.20.0.1:9000', poll success, but error: Operation now in progress (29).
E: Could not connect to client. :-(
Log closed at 2017-05-31 11:01:14

In PhpStorm I'm using remote debugger with following settings:

server

Host - 127.0.0.1  
Port - 80 

Absolute path on server

/usr/share/nginx/html

IDE session key

PHPSTORM

回答1:


Ok I got the solution in here

https://forums.docker.com/t/ip-address-for-xdebug/10460/9

I had to set my internal ip to xdebug.remote_host and disable xdebug.remote_connect_back=0

Seems this is a osx thing. Hope this helps someone here




回答2:


I've found that the following config on ext-xdebug.ini works for Docker for Mac

xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal

Docker automatically defines host.docker.internal within containers. So we simply point xdebug to think host.docker.internal is the IP of host machine (which obviously is). This way, we don't have to rely on ever changing internal IP between docker container and host.

More information can be found here https://docs.docker.com/docker-for-mac/networking/#use-cases-and-workarounds



来源:https://stackoverflow.com/questions/44283171/using-xdebug-through-docker-container-in-phpstorm

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!