使用来自 docker-compose 的 docker 远程解释器在 Intellij 中运行 PHPUnit 期望“/opt/project”中的项目

fra*_*ity 2 php phpunit intellij-idea docker docker-compose

我在 IntelliJ(2019.3.2,Build #IU-193.6015.39)中加载了一个 PHP symfony 项目,其结构如下(省略了不相关的文件,如 README 等):

<project_root>
+- src/
+- tests/
+- vendor/
|  +- autoload.php    
+- .env
+- composer.json
+- composer.lock
+- docker-compose.yml
+- Dockerfile
+- phpunit.xml
+- phpunit-custom.xml
Run Code Online (Sandbox Code Playgroud)

项目解释器通过 docker-compose 设置为使用远程 docker(Docker for Mac),并且 IntelliJ 正确检测解释器和调试器: 在此处输入图片说明

docker-compose.yml 具有以下结构:

version: "2"

services:
    app:
        build: .
        env_file:
            - ./.env
        ports:
            - 8888:80
        volumes:
            - ./:/var/www/
            - .docker/app-dev/nginx/fastcgi-timeouts.conf:/etc/nginx/fastcgi-timeouts.conf
            - .docker/app-dev/php/conf.d/00_opcache.ini:/etc/php/conf.d/00_opcache.ini
            - .docker/app-dev/php/conf.d/30_xdebug.ini:/etc/php/conf.d/30_xdebug.ini
            - .docker/app-dev/php/php-fpm-settings.conf:/etc/php/php-fpm-settings.conf

    db:
        image: mysql:5.6
        environment:
            MYSQL_DATABASE: project_database
            MYSQL_USER: user
            MYSQL_PASSWORD: password
            MYSQL_ROOT_PASSWORD: master_password
        ports:
            - 3306:3306
        volumes:
            - mysql-data:/var/lib/mysql:delegated
            - .docker/db/mysqld.cnf:/etc/mysql/conf.d/mysqld.cnf
            - .docker/db/000-structure.sql:/docker-entrypoint-initdb.d/000-structure.sql
            - .docker/db/001-data.sql:/docker-entrypoint-initdb.d/001-data.sql
            - .docker/db/002-test-data.sql:/docker-entrypoint-initdb.d/002-test-data.sql

volumes:
    mysql-data:

Run Code Online (Sandbox Code Playgroud)

所以项目被挂载到容器的/var/www. 使用docker-compose up -d它启动项目后,可以http://localhost:8888按预期访问。但是通过 IntelliJ 运行单元测试不起作用,因为生成的命令需要/opt/project容器文件夹中的配置:

<project_root>
+- src/
+- tests/
+- vendor/
|  +- autoload.php    
+- .env
+- composer.json
+- composer.lock
+- docker-compose.yml
+- Dockerfile
+- phpunit.xml
+- phpunit-custom.xml
Run Code Online (Sandbox Code Playgroud)

而配置文件的路径必须作为 UI 中的绝对路径提供。 在此处输入图片说明

输入项目相对路径不起作用。 在此处输入图片说明 所以似乎没有办法告诉 IntelliJ 查看实际安装项目的路径。

小智 5

我有一个类似的问题,我在 Intellij 设置中找不到任何选项,所以我需要手动更改.idea目录中的路径。尝试搜索/opt/project内部.idea目录并将其替换为/var/www.

就我而言,这个问题是由我的 Intellij Ultimate 2019.3 中的 Python 插件引起的

  • 事实上,只需禁用 python 插件就可以解决问题。有趣的是,“.idea”文件夹中所有与 PHP 相关的“.xml”文件仍然引用“/opt/project”,但似乎被项目的路径映射覆盖(“{PROJECT-ROOT} -&gt; /var/www”) 。 (4认同)
  • 这曾经在我的设置中起作用,但现在不起作用了,我知道为什么:)有错误报告我可以+1吗? (2认同)