【问题标题】:Using Xdebug and PhpStorm with Docker container on Windows在 Windows 上将 Xdebug 和 PhpStorm 与 Docker 容器一起使用
【发布时间】:2021-04-09 09:41:44
【问题描述】:

我正在尝试使用 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 配置:

服务器

调试

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

和 PHP 远程调试

我使用 Chrome 的 Xdebug Helper 插件来发送会话密钥

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

我正在 PhpStorm 中监听 Xdebug 连接(在整个代码中都有断点):

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

然而。断点不会出现阻塞,也不会回调 PhpStorm。

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

【问题讨论】:

  • 1) 您的 Xdebug 版本是多少?一个屏幕截图(phpinfo)显示为 2.x,而 PhpStorm(最后一个屏幕截图)显示为 3.0.1。三重检查(以防万一:CLI 和 Web 服务器可能使用不同的 php.ini;确保使用正确的 URL 等) 2)共享通过浏览器捕获的 phpinfo() 输出的整个 Xdebug 部分 3)启用 Xdebug 日志,尝试调试和共享生成的日志。 P.S. 是的,您不需要 DBGp 代理(您的设置根本不需要它......而且我非常怀疑您是否安装了所需的代理软件)
  • 我建议在您的实际项目中创建一些新端点(我假设它服务于实际网页),而不仅仅是自定义“test.php”脚本并在那里调用phpinfo()——这是为了确保它肯定由正确的服务器提供服务(检查您的 ENV 变量以确保这一点)。我这么说的原因是:Xdebug v3 使用 不同 配置参数而不是 v2。 v2 中的所有重要配置参数在 v3 中 nothing

标签: php windows docker phpstorm xdebug


【解决方案1】:

感谢LazyOne,我再次查看了配置,发现 Step Debugger 已禁用。

我在我的 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: [Step Debug] Could not connect to debugging client

并补充:

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 的 comment 之后,我更新了 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

【讨论】:

  • 通过xdebug.org/docs/upgrade_guide 并更新您的配置以仅使用 Xdebug v3 参数。对于 Xdebug 看到的每个 v2 参数,它都会在您的错误日志中抱怨它。您不需要为每个请求都用无用的行淹没您的日志,对吗? xdebug.idekey=PHPSTORM 在两个版本中都相同,您已经有 3 行用于 v3(最后 3 行)。其余的 xdebug. 参数可以删除或更新为 v3 参数名称。
【解决方案2】:

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

除非你真的需要一个 docker compose 来运送我强烈推荐使用Lando。 它始终具有正确的 XDebug 配置,并且具有可使用的真实 (https) URL 有很大帮助。

【讨论】:

  • Lando 看起来非常有用。
猜你喜欢
  • 1970-01-01
  • 2018-12-19
  • 1970-01-01
  • 1970-01-01
  • 2017-11-01
  • 2022-01-10
  • 1970-01-01
  • 2020-10-10
  • 1970-01-01
相关资源
最近更新 更多