【问题标题】:PhpStorm xdebug can't find file when connection comes from docker container当连接来自 docker 容器时,PhpStorm xdebug 找不到文件
【发布时间】:2017-09-21 03:33:45
【问题描述】:

我正在尝试将我的 Magento 开发环境迁移到 docker。我已经开始使用this 即用型解决方案。除了 xdebug 之外,几乎所有东西都能正常工作。

我已经根据this tutorial 设置了 PhpStorm,并且我已经在服务器部分的 docker 卷上正确映射了我的本地项目目录。当我尝试开始调试时,调试器窗口中会出现此消息

在本地找不到文件“/var/www/html/pub/index.php”。 要修复它,请通过环境变量 PHP_IDE_CONFIG 设置服务器名称并重新启动调试会话。

我已经添加了这个

environment:
  - PHP_IDE_CONFIG=serverName=Magetwo

到 php 部分中的docker-compose.yml,但仍然是同样的错误。仅当我的项目位于主机上的同一目录中时,调试才有效,例如在容器卷中,但我想要不同的目录。

我应该改变什么来强制 xdebug 工作?

【问题讨论】:

  • 不是 Docker 用户 .. 但根据该手册,它应该是 PHP_IDE_CONFIG: "serverName=Magento" 之类的东西(我指的是语法差异)吗?
  • 怎么样XDEBUG_CONFIG: 'idekey=PHPSTORM'

标签: docker phpstorm docker-compose xdebug


【解决方案1】:

在尝试使用 docker 在 PHPStorm 上进行调试时,同样的问题也适用。

您可以通过在 nginx 配置中添加 server_name 来解决它:

server_name _; 应设置为 _,这是默认服务器名称。您还可以添加 另一个 服务器名称,从而使 PhpStorm 添加一个新的 PHP 服务器(设置:PHP > 服务器)并将其用作Nameserver_name _ MyProject;

server {
    listen 80;
    ### Add the following line to nginx config file ###
    server_name  _  AnotherServerNameForPhpStorm;
    index index.php index.html;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;
    root /var/www/public;
    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass app_bug:9000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        include xdebug/remote.conf;
    }
    location / {
        try_files $uri $uri/ /index.php?$query_string;
        gzip_static on;
    }
}

希望这可以帮助仍然与我有同样问题的人

【讨论】:

  • 您应该突出显示示例代码中解决问题的确切部分
  • 谢谢!这个答案应该被接受 - 这为我解决了。
  • 为什么会这样?我汗流浃背 XDebug 有时就像黑魔法......
  • server_name _;// 将此行添加到 nginx 配置文件此行让 nginx 接受任何域
  • 甜,这解决了我的问题
【解决方案2】:

我通常将 docker 子网 IP 设置为远程主机 ip,如下所示:

XDEBUG_CONFIG=remote_host=172.17.0.1
PHP_IDE_CONFIG=serverName=your_server_name_in_phpstorm_settings

你可以用这个命令在 Linux 中检查 ip:

ifconfig docker0

此外,如果您使用 docker-compose,您可以将 xdebug 变量定义移动到单独的 .env 文件中,并将其链接到 docker-compose.yml 中的容器配置:

container_name:
    ...
    env_file: .env
    ...
...

【讨论】:

  • 你也可以在windows上使用XDEBUG_CONFIG=remote_host=host.docker.internal(其他操作系统没试过,但应该work,而不是硬编码你机器的IP。
  • docker.for.mac.host.internal for MacOS
【解决方案3】:

我遇到了同样的问题 尝试在 xdebug config 中添加这一行:

xdebug.extended_info = 1

应该将环境变量传递给$_SERVER

【讨论】:

    【解决方案4】:

    尝试这样添加:

    environment:
      PHP_IDE_CONFIG: "serverName=Magetwo"
    

    然后在“设置”>“PHP”>“服务器”中添加一个名为 Magetwo 的新服务器以及您用于调试的主机和端口。

    【讨论】:

      【解决方案5】:

      我遇到了类似的问题,同样的“要修复它,请通过环境变量 PHP_IDE_CONFIG 设置服务器名称并重新启动调试会话。”

      最终为我解决的问题是设置了 $_ENV['PHP_IDE_CONFIG'] 。收到此消息时请检查您的 $_ENV,我敢打赌您不会有一个名为“PHP_IDE_CONFIG”的密钥。

      我们如何得到这个集合? 首先确保您的容器中有一个名为 PHP_IDE_CONFIG 的环境变量。如果你没有那么得到那个集合。我个人使用文件来定义我的环境变量。请参阅 https://docs.docker.com/compose/environment-variables/#set-environment-variables-in-containers 并搜索“env_file”。

      一旦您将 env 变量放入容器中,但仍然无法正常工作,请尝试以下操作: 转到查看 > 工具窗口 > Docker。然后单击编辑配置(它是一个图标)。在那里,确保您已连接到 Docker,并且您有一个 vm 路径到本地路径的映射。

      除此之外,我还使用了 Oleg 的答案来设置 xdebug.extended_info=1 尽管这本身并没有为我解决问题,但我正在使用此设置。

      【讨论】:

        猜你喜欢
        • 2020-02-26
        • 2020-02-19
        • 2020-08-10
        • 1970-01-01
        • 2018-04-27
        • 1970-01-01
        • 1970-01-01
        • 2018-08-05
        • 2016-10-01
        相关资源
        最近更新 更多