Windows环境下Docker运行SonarScanner无法扫描源代码问题咨询
问题根因与解决方案
核心问题定位
你遇到的报错本质是Windows环境下终端路径变量格式不兼容Docker挂载规则,导致本地项目目录没有被正确挂载到SonarScanner容器的/usr/src目录下,容器内扫描路径为空,所以要么提示找不到代码要么提示指定目录不存在。
第一步:先验证挂载是否正常
执行以下命令测试当前目录是否能被正常挂载到容器内:
# 通用测试命令,不同终端替换路径变量即可 docker run --rm -v <你的当前目录变量>:/usr/src alpine ls /usr/src
如果命令输出为空,说明挂载确实失败,按下方对应终端的方案修改参数即可。
分终端的解决方案
1. PowerShell 终端
PowerShell的$PWD是路径对象不是纯字符串,需要转换为绝对路径格式:
把原来的挂载参数 -v $PWD:/usr/src 替换为:
-v "${PWD.Path}:/usr/src"
完整启动命令示例:
docker run \ --rm \ --network=host \ -e SONAR_HOST_URL="http://127.0.0.1:9000/" \ -e SONAR_LOGIN="你的token" \ -v "${PWD.Path}:/usr/src" sonarsource/sonar-scanner-cli \ -Dsonar.projectKey=some-project-name \ -Dsonar.sources=你的子目录名
2. CMD 命令提示符
CMD没有$PWD变量,用系统内置的%cd%表示当前目录:
把挂载参数替换为:
-v %cd%:/usr/src
3. WSL 终端
如果是在WSL环境下调用Docker Desktop,需要先开启Docker Desktop设置中的「WSL集成」开关,或者将WSL路径转换为Windows格式:
-v $(wslpath -w $PWD):/usr/src
其他验证与排查项
- 挂载成功后如果还是有问题,可以添加
-Dsonar.verbose=true参数执行扫描,查看日志中识别到的文件列表,确认路径是否匹配。 - 不要在
sonar.sources参数中写宿主机的绝对路径,该参数值是相对于容器内/usr/src的相对路径。
内容的提问来源于stack exchange,提问作者hellneck
相关产品推荐
相关产品推荐

