无法将PhpStorm与Docker的xdebug连接起来

我有以下的Dockerfile:

FROM php:7.0-fpm-alpine RUN apk add --update --virtual build_deps gcc g++ autoconf make &&\ docker-php-source extract &&\ pecl install xdebug &&\ echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ docker-php-ext-enable xdebug &&\ docker-php-source delete && \ apk del build_deps && \ rm -rf /var/cache/apk/* && \ rm -rf /tmp/* ENTRYPOINT ["php-fpm"] 

我用下面docker-compose.yml运行它:

 version: '2' services: nginx_dev: image: nginx:alpine ports: - "5092:5092" links: - "my_symfony_www_dev" volumes: - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro' - './logs/dev:/var/logs' volumes_from: - 'my_symfony_www_dev' my_symfony_www_dev: build: context: . dockerfile: Dockerfile_dev image: "myimage/my_symfony_app:dev_php" volumes: - "$SOURCE_PATH:/var/www/html:Z" environment: - PHP_IDE_CONFIG= "serverName=my_symfony_www_dev" - XDEBUG_CONFIG="remote_host=10.254.254.254,remote_port=9080" - PHP_XDEBUG_ENABLED=1 

也看到我在那跑:

 sudo ip addr add 10.254.254.254/24 brd + dev enp4s0 label enp4s0:1 

并像这样configurationPhpStorm IDE:

远程调试器PhpStorm设置

服务器

Xdebug配置

DBGp代理配置

然后在Firefox中按下 在这里输入图像说明 button,并在PhpStorm我按下 在这里输入图像说明 button我在app_dev.php设置了一个断点,没有任何反应。

我的系统通过netstat -ntlp命令侦听端口9080 ,PhpStorm侦听(PhpStorm是根据该答案的服务器)。

 tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN 4773/java 

你有什么想法,为什么会发生,以及如何解决?

编辑1:

phpinfo()显示:

xdebug phpinfo

我也设置de cocker-compose.yml为:

 version: '2' services: nginx_dev: image: nginx:alpine ports: - "5092:5092" links: - "my_symfony_www_dev" volumes: - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro' - './logs/dev:/var/logs' volumes_from: - 'my_symfony_www_dev' my_symfony_www_dev: build: context: . dockerfile: Dockerfile_dev image: "myimage/my_symfony_app:dev_php" volumes: - "$SOURCE_PATH:/var/www/html:Z" environment: - XDEBUG_CONFIG="remote_host=10.254.254.254,remote_port=9080" - PHP_XDEBUG_ENABLED=1 

而我的dockerfile是:

 FROM php:7.0-fpm-alpine RUN apk add --update --virtual build_deps gcc g++ autoconf make &&\ docker-php-source extract &&\ pecl install xdebug &&\ echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ docker-php-ext-enable xdebug &&\ docker-php-source delete && \ apk del build_deps && \ rm -rf /var/cache/apk/* && \ rm -rf /tmp/* ENTRYPOINT ["php-fpm"] 

还是一样的结果。

最后,我不得不把我的Dockerfile放在下面:

 FROM php:7.0-fpm-alpine VOLUME /var/log/xdebug ARG XDEBUG_HOST="172.17.0.1" ARG XDEBUG_PORT=9021 RUN apk add --update --virtual build_deps gcc g++ autoconf make &&\ docker-php-source extract &&\ pecl install xdebug &&\ docker-php-ext-enable xdebug &&\ && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \ && echo "xdebug.remote_autostart=0" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_handler = dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/xdebug.ini &&\ echo "xdebug.remote_host=${XDEBUG_HOST}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini &&\ echo "xdebug.remote_port=${XDEBUG_PORT}" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini &&\ docker-php-source delete && \ apk del build_deps && \ rm -rf /var/cache/apk/* && \ rm -rf /tmp/* ENTRYPOINT ["php-fpm"] 

XDEBUG_HOST构buildarg包含通过GNU / Linux系统的docker0networking接口的ip(使用ifconfig查找)。

而在我docker-compose.yml我提供了以下内容:

 version: '2' services: nginx_dev: image: nginx:alpine ports: - "5092:5092" links: - "my_symfony_www_dev" volumes: - './conf/nginx/nginx_dev.conf:/etc/nginx/nginx.conf:ro' - './logs/dev:/var/logs' volumes_from: - 'my_symfony_www_dev' my_symfony_www_dev: build: context: . dockerfile: Dockerfile_dev args: XDEBUG_HOST: 172.17.0.1 XDEBUG_PORT: 9021 image: "myimage/my_symfony_app:dev_php" volumes: - "$SOURCE_PATH:/var/www/html:Z" 

在映射到卷上的./conf/nginx/nginx_dev.conf ,我在server部分放置了以下设置:

 server_name 0.0.0.0; 

然后在phpstorm上使用以下设置:

通过phpstorm设置服务器

通过phpstorm进行XDEBUG设置

那么你很好走!