Docker toolbox Xdebug不使用PhpStorm

Docker toolbox Xdebug不使用PhpStorm,php,docker,phpstorm,xdebug,Php,Docker,Phpstorm,Xdebug,我尝试了在互联网上找到的所有教程,但仍然无法使用docker工具箱在PhpStorm中使用一个简单的断点 我目前在我的Dockerfile中有这个: # Install xdebug RUN pecl install xdebug; \ docker-php-ext-enable xdebug; \ echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini

我尝试了在互联网上找到的所有教程,但仍然无法使用docker工具箱在PhpStorm中使用一个简单的断点

我目前在我的
Dockerfile
中有这个:

# Install xdebug
RUN pecl install xdebug; \
    docker-php-ext-enable xdebug; \
    echo "error_reporting = E_ALL" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_startup_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "display_errors = On" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_port=9001" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_connect_back=0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_host=192.168.99.100" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.idekey=PHPSTORM" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini; \
    echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini;
Xdebug安装和配置正确(
php-i
output):

在我的PhpStorm配置中,我具有以下功能:

version: '3'

services:
  application:
    image: project_image:latest
    environment:
      - C_UID=${C_UID:-1000}
      - C_GID=${G_UID:-1000}
      - DEVELOPMENT=${DEVELOPMENT:-1}
      - ~/.ssh:/var/www/.ssh
      - ~/.composer:/var/www/.composer
    env_file:
      - .env
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    ports:
      - 9001:9001

  nginx:
    image: dockerwest/nginx-laravel:${NGINXVERSION:-stable}
    environment:
      - VIRTUAL_HOST=${BASEHOST:-project_name.docker},${EXTRAHOSTS}
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    links:
      - application
    ports:
      - 80:80
代理:

调试

PHP解释器

调试配置

服务器配置

模糊的项目是
用户名
项目名称

我在一个项目中有两个文件夹,一个叫做
docker
,保存所有docker文件,另一个叫做
site
,保存所有站点文件

my docker compose的配置如下所示:

version: '3'

services:
  application:
    image: project_image:latest
    environment:
      - C_UID=${C_UID:-1000}
      - C_GID=${G_UID:-1000}
      - DEVELOPMENT=${DEVELOPMENT:-1}
      - ~/.ssh:/var/www/.ssh
      - ~/.composer:/var/www/.composer
    env_file:
      - .env
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    ports:
      - 9001:9001

  nginx:
    image: dockerwest/nginx-laravel:${NGINXVERSION:-stable}
    environment:
      - VIRTUAL_HOST=${BASEHOST:-project_name.docker},${EXTRAHOSTS}
    volumes:
      - ${APPLICATION:-../site}:/phpapp
    links:
      - application
    ports:
      - 80:80
有人知道我做错了什么吗

当我尝试取消telnet 192.168.99.100 9001时,无法建立连接,端口
9000
也不能,但是端口
80
给了我很好的响应


有人知道这里发生了什么吗?

Xdebug需要打开到PhpStorm的连接。您不需要Docker中公开的端口,也不需要使用Xdebug代理执行任何操作。telnet需要从docker容器到PhpStorm中完成。
xdebug.remote_host
中的IP地址必须是IDE的IP地址,而不是docker容器(HTTP/Apache在端口80上侦听)的IP地址。

3 xdebug必须满足与VirtualBox远程工作的条件,尤其是与VirtualBox中的docker相关的条件

1)remote\u connect\u back=1或主机的确切ip地址(可能经常不同)必须列在remote\u host config字段中(,有时两者不能同时工作,特别是在docker与virtualbox=直接在windows hyper-v上分开的情况下)

2)没有其他应用程序可以在端口9000处公开,该端口必须为php编辑器保留,或者其他端口必须由编辑器保留/侦听(或用于php web项目),并从php寻址/传输,这是一种基于项目的配置


3)与第二点类似,VirtualBox必须没有到该端口的端口转发,因为它会有效地占用该端口,但它必须保留给php编辑器,而不是VirtualBox端口转发。并非virtualbox必须在该端口侦听才能转发到某个内部应用程序,但外部php编辑器必须侦听它=该端口

同样值得强调的是,它是xdebug.remote\u host还是xdebug.remote\u autostart。在和中都提到了这一点


换句话说,如果您感觉远程主机设置被忽略,请检查远程自动启动是否意外打开。

phpstorm是否正在运行和侦听?顶栏,电话。是的,这是一个屏幕截图:
192.168.99.100
它来自哪里?0_o@myxaxa这是我从docker toolbox(windows)提供给我的VM获得的IP。正如我在回答中解释的那样,这是错误的地址。好的,我同意你的看法,但我如何知道我的IDE的IP?这不是网络中的IP,对吗?(现在我的情况是172.16.199.69)?@Robin
xdebug.remote\u host=host.docker.internal
试试这个
php-i
给我
xdebug.remote\u host=>192.168.99.100=>host.docker.internal
现在,但调试仍然不起作用:(连接到virtualbox内部docker将仅适用于web,而不适用于控制台,因为当然web和php编辑器位于不同的位置-在virtualbox外部,而命令行位于virtualbox内部。出于同样的原因,对于此设置,它将不适用于host.docker.internal,因为它指的是docker后面的直接网络,也不适用于docker.for。).mac.host.internal或docker.for.win.localhost,因为在本例中,phpeditor在Virtualbox之外,而docker在里面。XDEBUG_CONFIG env var可能覆盖了connect_back或remote_host中的任何一个,因此它们中的一个似乎有效,反之,versaXDEBUG_CONFIG env var似乎不适用于每个XDEBUG版本/配置