在Windows上与Docker容器一起使用Xdebug和PhpStorm

在Windows上与Docker容器一起使用Xdebug和PhpStorm,php,windows,docker,phpstorm,xdebug,Php,Windows,Docker,Phpstorm,Xdebug,我正在尝试使用PhpStorm使Xdebug在Windows上为Docker容器工作。我读了不同的文章和其他文章,但仍然不起作用 在docker-compose.yaml中,我的应用程序容器有以下配置: version: "3.7" services: #PHP Service app: build: args: user: user uid: 1000 context: ./ docker

我正在尝试使用PhpStorm使Xdebug在Windows上为Docker容器工作。我读了不同的文章和其他文章,但仍然不起作用

在docker-compose.yaml中,我的应用程序容器有以下配置:

version: "3.7"
services:

  #PHP Service
  app:
    build:
      args:
        user: user
        uid: 1000
      context: ./
      dockerfile: docker/php/Dockerfile
    image: rpg
    container_name: rpg-app
    restart: unless-stopped
    tty: true
    environment:
      SERVICE_NAME: app
      SERVICE_TAGS: dev
      PHP_IDE_CONFIG: serverName=RpgServer
    working_dir: /var/www
    command: /var/www/docker/php/application-init.sh
    volumes:
      - ./:/var/www
      - ./docker/php/local.ini:/usr/local/etc/php/conf.d/local.ini
    networks:
      - rpg-app-network
    depends_on:
      - db

  ...

  #Nginx Service
  nginx:
    image: nginx:1.17-alpine
    container_name: rpg-nginx
    restart: unless-stopped
    tty: true
    ports:
      - "8080:80"
      - "443:443"
    volumes:
      - ./:/var/www
      - ./docker/nginx/conf.d/:/etc/nginx/conf.d/
    networks:
      - rpg-app-network
    depends_on:
      - app

使用
phpinfo()
我得到以下php配置:

我有以下PhpStorm配置:

[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/www/storage/logs/xdebug.log
xdebug.remote_mode = req
服务器

调试

DBGp代理(不要真的认为是相关的)

和PHP远程调试

我使用Chrome的Xdebug助手插件发送会话密钥

phpinfo()
中,我可以看到PHP接收到Xdebug会话密钥:

我正在PhpStorm中侦听Xdebug连接(代码中有断点):

我在启用Xdebug Helper的浏览器中运行应用程序

然而。您不会期望断点阻塞,也不会回调PhpStorm

如果我尝试在PhpStorm中使用调试器配置验证,我会得到以下结果:

从外观上看,您已经正确地设置了所有内容,可能除了源路径映射(您可以在PHPStorm的服务器下找到它)。这通常是断点不起作用的原因。同时尝试启用“第一行中断”选项

除非你真的需要一个码头撰写航运我强烈建议使用。 它总是有正确的XDebug配置,并且有真实的(https)URL可以使用,这非常有帮助。

多亏了的,我再次查看了配置,发现步骤调试器被禁用

我在php fpm Dockerfile中以以下方式安装Xdebug:

# Install xdebug
RUN pecl install xdebug && docker-php-ext-enable xdebug
这是我最初的Xdebug配置:

[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/www/storage/logs/xdebug.log
xdebug.remote_mode = req
我补充说

xdebug.mode = debug
重新运行
docker compose up
后,我开始在容器日志中收到通知:

rpg-app  | NOTICE: PHP message: Xdebug: [Step Debug] Could not connect to debugging client. Tried: localhost:9003 (through xdebug.client_host/xdebug.client_port) :-(
我找到了这根线

并补充说:

xdebug.client_host=host.docker.internal
xdebug.client_port=9001
获取:

[xdebug]
zend_extension=xdebug.so
xdebug.remote_enable=1
xdebug.remote_autostart=1
xdebug.remote_connect_back=0
xdebug.remote_host=host.docker.internal
xdebug.remote_port=9001
xdebug.idekey=PHPSTORM
xdebug.remote_log=/var/www/storage/logs/xdebug.log
xdebug.remote_mode = req
xdebug.mode = debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9001
现在一切都好了!:)

编辑: 在LazyOne之后,我更新了Xdebug v3配置设置。 结果是:

[xdebug]

xdebug.idekey=PHPSTORM

xdebug.mode = debug
xdebug.client_host=host.docker.internal
xdebug.client_port=9001

xdebug.log=/var/www/storage/logs/xdebug.logs

1) 您的Xdebug版本是什么?一个屏幕截图(phpinfo)显示为2.x,而PhpStorm(最后一个屏幕截图)显示为3.0.1。三次检查(以防万一:CLI和web服务器可能使用不同的php.ini;确保使用了正确的URL等)2)共享通过浏览器捕获的
phpinfo()
输出的整个Xdebug部分3)启用Xdebug日志,尝试调试并共享生成的日志。另外,是的,您不需要DBGp代理(您的设置根本不需要它..而且我非常怀疑您是否安装了所需的代理软件),我建议在您的实际项目中创建一些新的端点(我假设它服务于实际的网页),而不仅仅是定制的“test.php”脚本和调用
phpinfo()
there——这是为了确保它确实由正确的服务器提供服务(检查您的ENV变量以确保这一点)。我这么说的原因是:xdebugv3使用的配置参数与v2不同。v2中所有重要的配置参数在v3中都不起作用。请检查并更新配置,使其仅使用Xdebug v3参数。对于Xdebug看到的每个v2参数,它都会在错误日志中对此进行投诉。您不需要为每个请求都用无用的行填充日志,对吗
xdebug.idekey=PHPSTORM在两个版本中都是相同的,v3已经有3行(最后3行)。其余的
xdebug.
params可以删除或更新为v3参数名称。