You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.22 23:27:02