问题描述
想要在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的内容,可以更精确地指导你解决问题。