使用 PhpStorm 在 Docker 容器中运行 PHPUnit

2022-08-30 13:43:05

我想配置我的PhpStorm IDE在我的Docker容器中运行PHPUnit测试。

似乎我被限制使用本地PHP可执行文件,或者通过SSH作为测试的解释器。

我可以在我的PHP容器上安装SSH服务,但它似乎是一个有点黑客的解决方案,并且在线文章不鼓励在容器上安装SSH服务。

为了让本地解释器工作,我尝试创建一个bash脚本,该脚本将在容器中代理对PHP的调用,如下所示:

#!/usr/bin/env bash

# Run PHP through Docker
docker exec -t mycontainer_php_1 php "$@"

当我自己运行它时,这很完美,但是当我将PhpStorm指向它作为本地PHP解释器时,它不会将其识别为有效的PHP可执行文件。

那么,有什么好方法可以让它工作呢?


答案 1

随着PhpStorm现在与Docker引擎(包括Docker for Mac)的更好集成,您现在可以执行以下操作(或阅读本文):

命令行:

  1. 拉取 phpunit Docker 映像: docker pull phpunit/phpunit
  2. (Mac 和 Windows)将 Docker 套接字桥接到API_URL socat -d TCP-LISTEN:2376,range=127.0.0.1/32,reuseaddr,fork UNIX:/var/run/docker.sock

然后 Phpstorm:

  1. 配置与 Docker 引擎的连接:
    • 转到“设置” - >“生成”、“执行”、“部署”> Docker
    • 创建新的 Docker 配置,设置为:API URL
      • Linux:unix:///var/run/docker.sock
      • Windows 和 Mac:或http://127.0.0.1:2376tcp://localhost:2376
  2. 配置远程解释器:
    • 转到设置 -> 语言和框架 -> PHP
    • 通过以下方式创建新的 PHP CLI 解释器:
      • 然后点击然后“远程...”...+
      • 选择 Docker
        • 服务器映像:
        • 映像名称:phpunit/phpunit:latest
        • PHP 可执行文件:php
  3. 配置 Phpunit:
    • 转到设置 -> 语言和框架 -> PHP -> PHPUnit
    • 创建新的 Phpunit 配置(然后“通过远程解释器...”),然后选择+
    • 设置Use Composer Autoloader
    • 脚本路径:/opt/project/vendor/autoload.php
    • 默认配置文件:/opt/project/phpunit.xml.dist
  4. 尝试运行测试!

答案 2

这有效:

DIR=$(dirname $(readlink -f "$0"))
docker run --rm --sig-proxy=true -v ${DIR}:${DIR} -w ${DIR} --pid=host php:cli php "$@"

只是把它放在一些文件中,chmod +x it =>刚刚用想法测试过,:)

让所有phpstorms帮助程序脚本真正工作的诀窍是挂载php可执行文件所在的目录。如果此脚本不在phpunit可执行文件和源代码的文件夹中,则必须扩展它以同时挂载它们。

(这里很重要的旁注:它们必须挂载到容器和主机 obv :) 中的同一文件夹中)

几个月后编辑,但也许对某些人有帮助:在这里用WordPress示例解决了这个问题:http://original-brownbear.github.io/2015/12/23/phpunit-docker-phpstorm.html


推荐