docker运行phpmd报libxml_disable_entity_loader弃用及app文件不存在错误
问题根因说明
你执行命令时调用的是jakzal/phpqa镜像内置的phpmd 2.9.1版本,和你项目本地安装的phpmd无关,所以更新项目内的phpmd不会生效。报错分为两类,根因分别如下:
- 废弃警告:phpmd 2.9.1依赖的Symfony组件使用了PHP 8.0+版本废弃的
libxml_disable_entity_loader()函数,只要镜像内置PHP版本>=8.0就会触发该提示 - 目录不存在错误:你当前执行命令的工作目录不对,或者当前shell的路径变量写法有误,导致挂载到容器内的项目目录为空,找不到app文件夹
解决方案
第一步:先修复目录不存在的致命错误
首先确认你执行命令的当前目录是Laravel项目根目录,即该目录下可直接看到app文件夹。再根据你使用的shell类型修正挂载路径的写法:
- Linux/macOS bash/zsh环境:
docker run -it --rm -v "$PWD":/project -w /project jakzal/phpqa phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
- Windows PowerShell环境:
docker run -it --rm -v ${PWD.Path}:/project -w /project jakzal/phpqa phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
- Windows CMD环境:
docker run -it --rm -v %cd%:/project -w /project jakzal/phpqa phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
如果是Windows环境,还需要确认Docker桌面已开放当前项目目录的文件共享权限,否则挂载会失败导致容器内目录为空
第二步:修复废弃警告(可选,警告不影响phpmd正常运行,仅需屏蔽提示可操作)
你可以任选以下一种方案处理:
- 使用内置PHP7.4版本的jakzal/phpqa镜像,不会触发该废弃提示:
# 以Linux环境为例,可根据自身shell替换路径变量 docker run -it --rm -v "$PWD":/project -w /project jakzal/phpqa:php7.4 phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
- 加参数屏蔽废弃错误提示:
# 以Linux环境为例,可根据自身shell替换路径变量 docker run -it --rm -v "$PWD":/project -w /project jakzal/phpqa php -d error_reporting=E_ALL^E_DEPRECATED /tools/phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
- 调用你项目本地安装的高版本phpmd(需提前将项目内phpmd更新到2.10.0及以上版本,该版本已修复废弃问题):
# 以Linux环境为例,可根据自身shell替换路径变量 docker run -it --rm -v "$PWD":/project -w /project jakzal/phpqa ./vendor/bin/phpmd app text cleancode,codesize,controversial,design,naming,unusedcode
内容的提问来源于stack exchange,提问作者Dayane Cordeiro
相关产品推荐
相关产品推荐

