【问题标题】:xdebug connection refused to Docker containerxdebug 连接拒绝到 Docker 容器
【发布时间】:2020-08-10 11:11:03
【问题描述】:

错误:

2020/04/26 23:43:48 [error] 8#8: *2 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.208.1, server: localhost, request: "GET /favicon.ico HTTP/1.1", upstream: "fastcgi://192.168.208.3:9000", host: "127.0.0.1", referrer: "http://127.0.0.1/"

无法与 xdebug 建立连接。 Docker 配置取自这里https://gitlab.com/martinpham/symfony-5-docker/-/tree/master/docker

xdebug 单独安装,IDE 可以识别。

在php-fpm环境下的docker-compose.yml中也添加了这个:

environment:
- XDEBUG_CONFIG:remote_host=host.docker.internal remote_enable=1 remote_autostart=off xdebug.idekey=PHPSTORM

还有什么需要添加/修改的?

【问题讨论】:

  • 您在 docker 日志中还看到了什么?
  • 你能粘贴你的 xdebug.ini 配置和 PHPStorm 的 Xdebug 调试端口和 DBGp 代理设置吗?
  • 能否请您在此处提供您的 xdebug 设置?

标签: php docker nginx docker-compose xdebug


【解决方案1】:

这就是我最近为 http 服务设置 docker + php + xdebug 的方式。我指导我的同龄人完成了它,结果完美无缺。

1。将 ENV PHP_IDE_CONFIG 添加到您的 docker fpm 池配置中

您需要将此环境添加到您的 php-fpm 池配置中。可能是www.conf(例如)

env[PHP_IDE_CONFIG] = "serverName=localhost"

2。将 xdebug.ini 添加到您的 docker 容器中

这是我用于设置的 xdebug.ini 示例:

xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = off
xdebug.remote_host = host.docker.internal
xdebug.remote_port = 9000
xdebug.idekey = PHPSTORM
xdebug.max_nesting_level = 1500

3。 [IntelliJ IDEA 或 PHPStorm] - 设置 PHP 服务器

  1. 打开Preferences
  2. 转到Languages & Frameworks -> PHP -> Servers
  3. Name 设置为 localhost(这很重要,应该匹配 PHP_IDE_CONFIG 值)
  4. Host 设置为 localhost
  5. 启用use path mappings
  6. 将您的项目根路径映射到 docker workdir(例如 /var/www/html),以便 IntelliJ 可以正确映射路径。

4。 [IntelliJ IDEA 或 PHPStorm] - 设置 IDE 密钥

  1. 打开Preferences
  2. 转到Languages & Frameworks -> PHP -> Debug -> DGBp proxy
  3. IDE 密钥 设置为 PHPSTORM

5。将 XDEBUG_SESSION=PHPSTORM 添加到您的 url/cookie..

最后:

  • 在您的网址中添加?XDEBUG_SESSION=PHPSTORM
  • 添加一个名为XDBEUG_SESSION 和值PHPSTORM 的cookie

【讨论】:

  • 这里的第 2 部分是最重要的,因为调试器需要知道在调试开始时要连接什么。 This article 具有描述主机、容器和 IDE 如何互连的架构。这篇文章的作者给出的答案很详尽。
【解决方案2】:

问题出现在: 环境:

- XDEBUG_CONFIG:remote_host=host.docker.internal remote_enable=1 remote_autostart=off xdebug.idekey=PHPSTORM
  1. 未正确解析。
  2. 如果我只传递 remote_host=host.docker.internal 那么它将传递“localhost”而不是主机 IP 地址。

【讨论】:

    【解决方案3】:

    我知道这篇文章是针对 PHPStorm 用户的,但是如果任何 VSCode 用户在这里偶然发现,那么需要做两件事与 PHPStorm 不同(更多关于 PHPStorm https://stackoverflow.com/a/61561910/3056278 的答案)-

    1. 传递主机的 IP 地址 (192.168...) 而不是 host.docker.internal
    2. 在调试启动配置中配置 pathMappings -
    {
        "name": "Debug Docker",
        "type": "php",
        "request": "launch",
        "port": 9000,
        "pathMappings": {
            "/var/www/app": "${workspaceFolder}"
        }
    },
    

    用你自己的路径替换/var/www/app

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-07
      • 2023-03-30
      • 2020-06-23
      • 2019-01-05
      • 1970-01-01
      • 2019-06-07
      相关资源
      最近更新 更多