本地Docker部署SonarQube 8.9时SonarScanner扫描超时无法执行报错
SonarScanner 连接本地Docker部署SonarQube超时问题排查
问题场景
- 本地笔记本通过Docker镜像部署SonarQube 8.9版本
- 浏览器访问
http://localhost:9000可正常加载服务端界面,所有浏览器侧功能运行正常 - 执行SonarScanner扫描命令时报错执行失败,实际执行的扫描命令为:
C:\repo>sonar-scanner -Dsonar.host.url="http://localhost:9000" -Dsonar.login="key"
完整报错日志
[18:00:22] 开始代码分析... [18:00:22] 检查可执行文件路径:C:\Users\shashk\.sonar\native-sonar-scanner\sonar-scanner-4.5.0.2216-windows\bin\sonar-scanner.bat [18:00:22] 已找到匹配当前平台的SonarScanner二进制文件,直接调用。 INFO: Scanner配置文件路径:C:\Users\shashk\.sonar\native-sonar-scanner\sonar-scanner-4.5.0.2216-windows\bin\..\conf\sonar-scanner.properties INFO: 项目根目录配置文件路径:C:\repo\sonar-project.properties INFO: SonarScanner 版本:4.5.0.2216 INFO: 运行环境:Java 11.0.3 AdoptOpenJDK(64位) INFO: 操作系统:Windows 10 10.0 amd64 INFO: 用户缓存目录:C:\Users\shashk\.sonar\cache INFO: ------------------------------------------------------------------------ INFO: 执行失败 INFO: ------------------------------------------------------------------------ INFO: 总耗时:5分00.631秒 INFO: 最终内存占用:3M/20M INFO: ------------------------------------------------------------------------ ERROR: SonarScanner 执行流程出错 org.sonarsource.scanner.api.internal.ScannerException: 无法启动SonarScanner分析 at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.lambda$createLauncher$0(IsolatedLauncherFactory.java:85) at java.base/java.security.AccessController.doPrivileged(Native Method) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:74) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.createLauncher(IsolatedLauncherFactory.java:70) at org.sonarsource.scanner.api.EmbeddedScanner.doStart(EmbeddedScanner.java:185) at org.sonarsource.scanner.api.EmbeddedScanner.start(EmbeddedScanner.java:123) at org.sonarsource.scanner.cli.Main.execute(Main.java:73) at org.sonarsource.scanner.cli.Main.main(Main.java:61) Caused by: java.lang.IllegalStateException: 从服务端获取引导索引失败 at org.sonarsource.scanner.api.internal.BootstrapIndexDownloader.getIndex(BootstrapIndexDownloader.java:42) at org.sonarsource.scanner.api.internal.JarDownloader.getScannerEngineFiles(JarDownloader.java:58) at org.sonarsource.scanner.api.internal.JarDownloader.download(JarDownloader.java:53) at org.sonarsource.scanner.api.internal.IsolatedLauncherFactory.lambda$createLauncher$0(IsolatedLauncherFactory.java:76) ... 7 more Caused by: java.net.SocketTimeoutException: 请求超时 at org.sonarsource.scanner.api.internal.shaded.okio.Okio$4.newTimeoutException(Okio.java:232) at org.sonarsource.scanner.api.internal.shaded.okio.AsyncTimeout.exit(AsyncTimeout.java:286) at org.sonarsource.scanner.api.internal.shaded.okio.AsyncTimeout$2.read(AsyncTimeout.java:241) at org.sonarsource.scanner.api.internal.shaded.okio.RealBufferedSource.read(RealBufferedSource.java:51) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http1.Http1ExchangeCodec$AbstractSource.read(Http1ExchangeCodec$389) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.http1.Http1ExchangeCodec$UnknownLengthSource.read(Http1ExchangeCodec$529) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.connection.Exchange$ResponseBodySource.read(Exchange.java:286) at org.sonarsource.scanner.api.internal.shaded.okio.RealBufferedSource.select(RealBufferedSource.java:100) at org.sonarsource.scanner.api.internal.shaded.okhttp.internal.Util.bomAwareCharset(Util.java:467) at org.sonarsource.scanner.api.internal.shaded.okhttp.ResponseBody.string(ResponseBody.java:181) at org.sonarsource.scanner.api.internal.ServerConnection.downloadString(ServerConnection.java:100) at org.sonarsource.scanner.api.internal.BootstrapIndexDownloader.getIndex(BootstrapIndexDownloader.java:39) ... 10 more Caused by: java.net.SocketTimeoutException: 读取响应超时 at java.base/java.net.SocketInputStream.socketRead0(Native Method) at java.base/java.net.SocketInputStream.socketRead(Unknown Source) at java.base/java.net.SocketInputStream.read(Unknown Source) at java.base/java.net.SocketInputStream.read(Unknown Source) at org.sonarsource.scanner.api.internal.shaded.okio.Okio$2.read(Okio.java:140) at org.sonarsource.scanner.api.internal.shaded.okio.AsyncTimeout$2.read(AsyncTimeout.java:237) ... 19 more ERROR:
核心报错根因
从异常栈可判断,SonarScanner向SonarQube服务端请求分析引导索引时,网络读取超时,在默认5分钟超时阈值处中断流程。浏览器可正常访问但Scanner请求失败,本质是两者的网络请求路径存在差异。
排查与解决方案
- 检查本地代理配置:SonarScanner内置的HTTP客户端默认不继承Windows系统代理设置,若本地开启全局代理、VPN,会导致Scanner请求localhost地址时被代理拦截,触发读超时。可在扫描命令中添加配置,跳过本地地址的代理转发:
-Dhttp.nonProxyHosts=localhost|127.0.0.1-Dhttps.nonProxyHosts=localhost|127.0.0.1 - 延长Scanner网络超时阈值:若Docker部署的SonarQube冷启动响应较慢,可手动调高超时时间,在扫描命令中添加参数:
-Dsonar.ws.timeout=300(单位为秒,可根据实际响应时长调整) - 验证命令行环境网络连通性:在本地命令行执行
curl http://localhost:9000/api/server/version,确认命令行可正常获取服务端版本响应,排除本地防火墙、安全软件拦截命令行程序网络请求的问题。 - 清理Scanner本地缓存:删除
C:\Users\shashk\.sonar\cache目录下的旧缓存文件,避免历史残留的无效引导索引文件导致请求异常。
内容的提问来源于stack exchange,提问作者Shashi Kant
相关产品推荐
相关产品推荐

