当连接来自 docker 容器时,PhpStorm xdebug 找不到文件

问题描述 投票:0回答:7

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

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

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

我已经添加了这个

environment:
  - PHP_IDE_CONFIG=serverName=Magetwo

到php部分的

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

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

docker phpstorm docker-compose xdebug
7个回答
16
投票

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

您可以通过在 nginx 配置中添加

server_name
来解决它:

server_name  _;
应设置为
_
,这是默认服务器名称。您还可以添加 另一个 服务器名称,从而导致 PhpStorm 添加一个新的 PHP 服务器(设置:PHP > 服务器)并将其用作
Name
server_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;
    }
}

希望这可以帮助那些和我有同样问题的人


12
投票

我通常将 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
    ...
...

5
投票

尝试这样添加:

environment:
  PHP_IDE_CONFIG: "serverName=Magetwo"

然后在“设置”>“PHP”>“服务器”中添加一个名为

Magetwo
的新服务器以及用于调试的主机和端口。 enter image description here


3
投票

请在 docker-compose.yaml 中为您的应用程序容器添加此代码

environment:
  - XDEBUG_CONFIG=idekey=PHPSTORM
  - PHP_IDE_CONFIG=serverName=name_of_yours_host_in_phpstorm

示例:

environment:
  - XDEBUG_CONFIG=idekey=PHPSTORM
  - PHP_IDE_CONFIG=serverName=localhost

另外。 php.ini 文件中的 xdebug 设置:

zend_extension=xdebug.so
xdebug.default_enable = On
xdebug.mode=debug
xdebug.start_with_request=yes
xdebug.discover_client_host=yes
xdebug.log="/path/in/your/project/to/xdebug.log"

并在 docker-compose.yaml 中为您的应用程序容器添加此代码

    volumes:
  - ./path/in/your/project/to/php.ini:/usr/local/etc/php/php.ini

`这对我有用


2
投票

我也面临同样的问题 尝试在 xdebug 配置中添加这一行:

xdebug.extended_info = 1

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


1
投票

我有一个类似的问题,相同的“要修复它,请通过环境变量 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”。

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

除此之外,我还使用Oleg的答案来设置


xdebug.extended_info=1
尽管这本身并没有解决我的问题,但我正在使用此设置。


1
投票

我也遇到了同样的问题,因为映射不正确。就我而言,我在标准 PHP 镜像的 docker 容器中使用 Laravel。 XDebug 已在 Dockerfile 中安装并启用:

RUN pecl install xdebug \  
&& docker-php-ext-enable xdebug

我用于调试的配置是:

zend_extension=xdebug
[xdebug]
xdebug.mode=develop,debug
xdebug.client_host=host.docker.internal
xdebug.start_with_request=yes
xdebug.extended_info = 1

我忽略的重要一点是 Laravel 的起点位于 Public/index.php 中,并且它是自动映射的,而项目根目录需要手动映射。为此,请转到 PHP Storm 设置,在 PHP 部分中,打开调试部分并添加服务器(可能已自动添加)。确保端口设置正确。然后在映射部分,在项目路由路径前面,添加您机器上的绝对路径。

值得一提的是,如果您想查看 XDebug 在诊断日志中所说的内容,您可以在 PHP 代码中使用以下函数:

xdebug_info();
© www.soinside.com 2019 - 2024. All rights reserved.