xdebug连接被拒绝到Docker容器

时间:2020-04-26 23:57:17

标签: php docker nginx docker-compose xdebug

错误:

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

还需要添加/修改什么?

3 个答案:

答案 0 :(得分:2)

这是我最近为http-services安装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. 名称设置为 localhost (这很重要,应匹配PHP_IDE_CONFIG值)
  4. 主机设置为 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

答案 1 :(得分: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地址。

答案 2 :(得分:0)

我知道这篇文章是针对 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 替换为您自己的路径!