在Docker容器内运行特定版本的phpUnit测试

88次阅读
没有评论

问题描述

想要在Docker容器内运行特定版本的phpUnit测试。该容器将使用指定版本的php,例如php:5.6-apache。这是一个Laravel应用程序。用户已经通过在主机文件上使用Composer安装了phpUnit,然后使用了卷(volume)命令将其传输到容器内。用户的composer.json文件具有以下条目:

"require-dev": {
    "phpunit/phpunit": "^5.0"
}

以下是用户运行测试的Docker命令:

docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php "php ./vendor/bin/phpunit"

但是返回以下错误:

exec: fatal: unable to exec php ./vendor/bin/phpunit: No such file or directory

用户不清楚为什么会出现这个错误,因为vendor目录位于用户站点目录的根目录下。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

要正确运行phpUnit测试,你需要调整运行命令,确保Docker容器内的php版本与测试的php版本匹配,并且指定正确的路径。你也可以查看Dockerfile中的ENTRYPOINT指令,以了解正确的php执行路径。以下是一些解决方案:

方案1

你需要运行的命令中,不需要引号将整个命令包括起来,只需指定php执行器和phpUnit脚本的路径:

docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php php ./vendor/bin/phpunit

这样做的原因是Docker容器在执行命令时会解析参数,如果整个字符串被引号包括,它会尝试执行一个名为php ./vendor/bin/phpunit的可执行文件,而不是分别执行php./vendor/bin/phpunit

方案2

如果上述方法仍然无法正常运行,你可以在运行phpUnit测试时指定完整的php执行器路径,以确保与容器内的php版本一致:

docker run --rm -it -v ~/Users/mow/Documents/devFolder/testdev:/app testdev_php /usr/local/bin/php ./vendor/bin/phpunit

上述命令假定php的可执行文件路径是/usr/local/bin/php,请根据实际情况进行调整。

方案3

在解决问题之前,检查Dockerfile中的ENTRYPOINT指令,确保php执行器的路径正确。如果不正确,你可能需要在命令中指定完整的php路径,以保证与容器内的php版本一致。

以上三种方法中,至少一种应该可以解决你的问题。如果问题仍然存在,可能是Dockerfile中的一些配置问题,需要检查Dockerfile中php的配置和路径设置,确保php可执行文件位于正确的位置。

请记住,以上解决方案仅在你提供的信息基础上进行了推测,具体情况可能需要根据实际的Docker配置和环境进行调整。如果你提供Dockerfile的内容,可以更精确地指导你解决问题。

正文完