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

xriantvc  于 2023-02-21  发布在  Docker
关注(0)|答案(6)|浏览(449)

我试图移动我的Magento开发环境到Docker。我已经开始与this准备使用的解决方案。几乎一切正常工作,除了xdebug。
我已经根据this tutorial设置了PhpStorm,并且我已经在服务器部分的Docker卷上正确Map了我的本地项目目录。当我尝试开始调试时,调试器窗口中会出现此消息
无法在本地找到文件“/var/www/html/pub/index.php”。若要修复此问题,请通过环境变量PHP_IDE_CONFIG设置服务器名称,然后重新启动调试会话。
我加了这个

environment:
  - PHP_IDE_CONFIG=serverName=Magetwo

到php部分的docker-compose.yml,但仍然是相同的错误。调试工作只有当我有项目位于相同的目录在主机上像在容器卷,但我想有不同的目录。
要强制xdebug工作,我应该做些什么修改?

cnh2zyt3

cnh2zyt31#

当尝试使用Docker在PHPSorm上进行调试时,同样的问题也会出现。
您可以通过向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;
    }
}

希望这能帮助那些对我还有同样问题的人

y4ekin9u

y4ekin9u2#

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

e7arh2l63#

试着这样补充:

environment:
  PHP_IDE_CONFIG: "serverName=Magetwo"

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

htrmnn0y

htrmnn0y4#

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

xdebug.extended_info = 1

它应该将env变量传递给$_SERVER

syqv5f0l

syqv5f0l5#

我有一个类似的问题,相同的'要修复它设置服务器名称的环境变量PHP_IDE_CONFIG和重新启动调试会话。'
我最终解决这个问题的方法是设置$_ENV ['PHP_IDE_CONFIG']。当你收到这个消息时,请检查你的$_ENV,我打赌你不会有一个名为'PHP_IDE_CONFIG'的键。
我们如何得到这个集合?首先确保你的容器中有一个名为PHP_IDE_CONFIG的环境变量。如果你没有,那么就得到这个集合。我个人使用一个文件来定义我的env变量。请访问https://docs.docker.com/compose/environment-variables/#set-environment-variables-in-containers并搜索'env_file'。
一旦你把你的env变量放到你的容器中,它仍然不工作,那么试试这个:进入视图〉工具窗口〉Docker,然后点击编辑配置(一个图标),在那里,确保你连接到Docker,并且你有一个虚拟机路径到本地路径的Map。
除此之外,我使用Oleg的答案设置xdebug.extended_info=1,尽管这本身并没有解决我的问题,但我正在使用此设置。

rjzwgtxy

rjzwgtxy6#

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

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

示例:

environment:
  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

对我很有效

相关问题