【发布时间】:2021-08-26 12:43:05
【问题描述】:
我有一个集成测试,它使用来自 docker 容器的主机名向 API URL 发出 curl 请求。 API 的 docker-compose.yml 与 PHP 的 docker-compose.yml 不同,因此它们被配置为通过共享网络链接(请参阅Communication between multiple docker-compose projects)。
当我通过 PHP 容器 (php vendor/phpunit/phpunit/phpunit tests) 的终端运行测试时,可以访问来自其他 docker-compose 环境的 API(将 docker 容器名称作为主机名)。所以它正在解决,并以内容响应。
但是当我在 PhpStorm 上运行测试时,它使用来自 docker-compose 的 PHP 解释器,无法解析 API URL,就好像会忽略共享网络一样。在终端中,我可以看到从 PhpStorm 生成并触发了一个长的 PHPUnit 命令:
[docker://php_php:latest/]:php /opt/project/php/vendor/phpunit/phpunit/phpunit --no-configuration --filter MyNamespace\\Tests\\CurlTest --test-suffix CurlTest.php /opt/project/php/tests/Integration --teamcity --cache-result-file=/opt/project/.phpunit.result.cache
如何修复 PhpStorm 测试运行程序以考虑 Docker 中的共享网络?
【问题讨论】:
-
根据您发布的命令,您使用的不是 Docker Compose 解释器,而是 Docker 解释器。在这种模式下,PhpStorm 只运行
docker run php_php:latest php ...,它不会重复使用现有容器并生成一个新容器,而不是连接自己的网络。尝试在exec模式下切换到 Docker Compose 解释器。 -
@EugeneMorozov 有道理,我看到我的解释器配置了
Docker而不是Docker Compose。但是现在我明白了为什么我使用Docker,当我尝试使用Docker Compose进行配置时,然后在General -> PHP Executable,我收到错误Failed to parse valiation script output。我尝试使用php和whereis php的所有其他路径,即/usr/local/bin/php、/usr/local/etc/php、/usr/local/lib/php、/usr/local/php,但没有成功。 -
不看日志就无法判断为什么会这样。将
#com.jetbrains.php添加到Help | Diagnostic Tools | Debug Log Settings,尝试再次添加 Docker Compose 解释器,然后查看日志 - 它究竟会产生什么错误? -
@EugeneMorozov 在日志中,在
com.intellij.execution.ExecutionException: Failed to parse validation script output之前,有一条调试信息Error on executing 'php [-dxdebug.remote_enable=0, -dxdebug.mode=off, /opt/.phpstorm_helpers/phpinfo.php]': Version mismatch: file C:\Users\...\docker-compose.yml specifies version 3.9 but extension file C:\Users\...\AppData\Local\JetBrains\PhpStorm2021.1\tmp\docker-compose.override.9.yml uses version 1。那是不是说 PHPStorm 只懂 docker-compose v1 规范? -
你的 docker-compose.yml 没有声明它的
version,对吧? 2021.2.1 之前的 PhpStorm 不支持此类文件,已在 PY-49305 的过程中修复
标签: php docker docker-compose phpstorm