无法将 PhpStorm 与 xdebug 连接 Docker
Can't connect PhpStorm with xdebug with Docker
我有以下 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
并像这样配置 PhpStorm IDE:
然后在 Firefox 中我按下 button and in PhpStorm I press the 按钮我在 app_dev.php
上设置了一个断点但没有任何反应。
我的系统通过 PhpStorm 侦听的 netstat -ntlp
命令侦听端口 9080
(根据 that answer,PhpStorm 是一个服务器)。
tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN 4773/java
您知道为什么会发生这种情况以及如何解决它吗?
编辑 1:
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
build arg 包含 GNU/Linux 系统上 docker0
网络接口的 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 上使用以下设置:
那你就可以开始了!
我有以下 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
并像这样配置 PhpStorm IDE:
然后在 Firefox 中我按下 app_dev.php
上设置了一个断点但没有任何反应。
我的系统通过 PhpStorm 侦听的 netstat -ntlp
命令侦听端口 9080
(根据 that answer,PhpStorm 是一个服务器)。
tcp 0 0 0.0.0.0:9080 0.0.0.0:* LISTEN 4773/java
您知道为什么会发生这种情况以及如何解决它吗?
编辑 1:
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
build arg 包含 GNU/Linux 系统上 docker0
网络接口的 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 上使用以下设置:
那你就可以开始了!