使用Docker版Sonar Scanner CLI未检测到源文件的问题求助
本地安装的sonar-scanner执行分析正常:
sonar-scanner -Dsonar.host.url=<SONARQUBE_URL> -Dsonar.login=<TOKEN> -Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes
扫描器能检测到30个待分析源文件。但使用Docker版sonar-scanner-cli执行时:
(winpty) docker run --rm -e SONAR_HOST_URL=<SONARQUBE_URL> -e SONAR_TOKEN=<TOKEN> -e SONAR_SCANNER_OPTS="-Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes" -v `pwd`:/usr/src sonarsource/sonar-scanner-cli:4.8.0
分析运行顺利,但未检测到任何源文件。已尝试添加-Dsonar.sources=.到SONAR_SCANNER_OPTS,以及替换pwd为/c/Projects/my_project,均无效。
验证挂载路径的正确性
Windows环境下Git Bash的pwd输出格式可能和Docker期望的路径不兼容。先执行echo $(pwd -W)获取Windows短路径(如C:/Projects/my_project),转换为Docker识别的格式(/c/Projects/my_project)后,执行以下命令确认挂载是否成功:winpty docker run --rm -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:4.8.0 ls -la /usr/src查看输出是否能看到项目源文件和
target/classes目录,确认文件被正确挂载到容器内。调整参数传递方式
Windows环境下环境变量的引号可能被解析错误,尝试直接在容器启动命令后追加sonar-scanner参数,替代SONAR_SCANNER_OPTS环境变量:winpty docker run --rm -e SONAR_HOST_URL=<SONARQUBE_URL> -e SONAR_TOKEN=<TOKEN> -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:4.8.0 -Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes -Dsonar.sources=.检查容器内文件权限
挂载文件可能存在权限问题导致扫描器无法读取,先查看容器内文件权限:winpty docker run --rm -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:4.8.0 ls -ln /usr/src如果文件所有者不是容器运行用户(通常为UID 1000),添加
--user 1000:1000参数确保读取权限:winpty docker run --rm --user 1000:1000 -e SONAR_HOST_URL=<SONARQUBE_URL> -e SONAR_TOKEN=<TOKEN> -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:4.8.0 -Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes -Dsonar.sources=.明确sonar.sources的具体路径
若项目源文件不在根目录(如src/main/java),需指定具体路径:winpty docker run --rm -e SONAR_HOST_URL=<SONARQUBE_URL> -e SONAR_TOKEN=<TOKEN> -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:4.8.0 -Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes -Dsonar.sources=src/main/java升级镜像版本
4.8.0版本较旧,可能存在Windows环境兼容性问题,尝试使用最新版镜像重新执行:winpty docker run --rm -e SONAR_HOST_URL=<SONARQUBE_URL> -e SONAR_TOKEN=<TOKEN> -v /c/Projects/my_project:/usr/src sonarsource/sonar-scanner-cli:latest -Dsonar.projectKey=<SOME_KEY> -Dsonar.java.binaries=target/classes -Dsonar.sources=.
内容的提问来源于stack exchange,提问作者Ivan dal Bosco

