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

从SonarQube 8.2升级至9.9 LTS时容器启动失败求助

SonarQube 8.2 升级至 9.9 启动失败问题解决

问题场景

尝试使用Docker Compose将SonarQube从8.2版本升级至9.9版本,采用PostgreSQL 12作为数据库,已备份8.2版本的所有数据并挂载到新的SonarQube容器中,但容器启动失败,日志中出现关键错误:

Current version is too old. Please upgrade to Long Term Support version firstly.

错误日志

2023.04.15 12:28:05 INFO  web[][o.s.s.p.LogServerVersion] SonarQube Server / 9.9.0.65466 / ce743843018827cb30c05735e7971523de34bb48
2023.04.15 12:28:05 INFO  web[][o.sonar.db.Database] Create JDBC data source for jdbc:postgresql://db:5432/sonar
2023.04.15 12:28:05 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Starting...
2023.04.15 12:28:05 INFO  web[][c.z.h.p.HikariPool] HikariPool-1 - Added connection org.postgresql.jdbc.PgConnection@123456
2023.04.15 12:28:05 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Start completed.
2023.04.15 12:28:07 INFO  web[][o.s.s.p.ServerFileSystemImpl] SonarQube home: /opt/sonarqube
2023.04.15 12:28:07 INFO  web[][o.s.s.u.SystemPasscodeImpl] System authentication by passcode is disabled
2023.04.15 12:28:07 WARN  web[][o.s.c.a.AnnotationConfigApplicationContext] Exception encountered during context initialization - cancelling refresh attempt: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@12345-org.sonar.server.platform.DatabaseServerCompatibility': Initialization of bean failed; nested exception is Current version is too old. Please upgrade to Long Term Support version firstly.
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jdk.internal.loader.ClassLoaders$AppClassLoader@123456-org.sonar.server.platform.DatabaseServerCompatibility': Initialization of bean failed; nested exception is Current version is too old. Please upgrade to Long Term Support version firstly.
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:628)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:542)
    at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:335)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:333)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:208)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:955)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:918)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:583)
    at org.sonar.core.platform.SpringComponentContainer.startComponents(SpringComponentContainer.java:187)
    at org.sonar.server.platform.platformlevel.PlatformLevel.start(PlatformLevel.java:80)
    at org.sonar.server.platform.platformlevel.PlatformLevel2.start(PlatformLevel2.java:103)
    at org.sonar.server.platform.PlatformImpl.start(PlatformImpl.java:196)
    at org.sonar.server.platform.PlatformImpl.startLevel2Container(PlatformImpl.java:169)
    at org.sonar.server.platform.PlatformImpl.init(PlatformImpl.java:77)
    at org.sonar.server.platform.web.PlatformServletContextListener.contextInitialized(PlatformServletContextListener.java:43)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4764)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5222)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1383)
    at java.base/java.util.concurrent.FutureTask.run(Unknown Source)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(Unknown Source)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:916)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:265)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:430)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:930)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.sonar.server.app.EmbeddedTomcat.start(EmbeddedTomcat.java:72)
    at org.sonar.server.app.WebServer.start(WebServer.java:55)
    at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:97)
    at org.sonar.process.ProcessEntryPoint.launch(ProcessEntryPoint.java:81)
    at org.sonar.server.app.WebServer.main(WebServer.java:104)
Caused by: org.sonar.api.utils.MessageException: Current version is too old. Please upgrade to Long Term Support version firstly.
2023.04.15 12:28:07 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Shutdown initiated...
2023.04.15 12:28:07 INFO  web[][c.z.h.HikariDataSource] HikariPool-1 - Shutdown completed.
2023.04.15 12:28:08 INFO  web[][o.s.s.a.EmbeddedTomcat] HTTP connector enabled on port 9000
2023.04.15 12:28:08 INFO  web[][o.s.p.ProcessEntryPoint] Hard stopping process
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] Process[Web Server] is stopped
2023.04.15 12:28:08 WARN  app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 143
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.04.15 12:28:08 INFO  app[][o.s.a.SchedulerImpl] SonarQube is stopped
2023.04.15 12:28:09 INFO  app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp

当前Docker Compose配置

version: "3.3"
services:
  sonarqube:
          #    image: sonarqube:8.9-community       
    build:
      context: ./sonarqube/
    container_name: sonarqube
    restart: always
    depends_on:
      - db
    networks:
      - sonarnet
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
    volumes:
      - /home/ubuntu/sonar/sonar_bk/sonarqube_data:/opt/sonarqube/data
      - /home/ubuntu/sonar/sonar_bk/sonarqube_extensions:/opt/sonarqube/extensions
      - /home/ubuntu/sonar/sonar_bk/sonarqube_logs:/opt/sonarqube/logs
  db:
    image: postgres:12
    container_name: postgres
    restart: always
    networks:
      - sonarnet
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
    volumes:
     - /home/ubuntu/sonar/sonar_bk/postgresql:/var/lib/postgresql
     - /home/ubuntu/sonar/sonar_bk/postgresql_data:/var/lib/postgresql/data

networks:
  sonarnet:
    driver: bridge

解决步骤

SonarQube不支持跨大版本直接升级,必须遵循先升级到对应系列的LTS版本,再升级到目标版本的路径,具体操作如下:

1. 先升级到8.9 LTS版本

  • 修改Docker Compose中SonarQube的配置,将build替换为官方8.9镜像(如果之前是自定义构建,也可以用对应8.9版本的Dockerfile构建):
    sonarqube:
      image: sonarqube:8.9-community
      # 注释掉原build配置
      # build:
      #   context: ./sonarqube/
      ...
    
  • 保持所有数据卷挂载不变,启动容器:
    docker-compose up -d
    
  • 等待容器启动完成,查看日志确认SonarQube完成数据库迁移并正常运行,访问SonarQube页面验证服务可用。

2. 升级到9.9版本

  • 确认8.9版本运行正常后,停止容器:
    docker-compose down
    
  • 将SonarQube镜像替换为9.9版本(或恢复自定义构建的9.9配置):
    sonarqube:
      # image: sonarqube:9.9-community
      build:
        context: ./sonarqube/
      ...
    
  • 再次启动容器,等待SonarQube完成从8.9到9.9的数据库迁移:
    docker-compose up -d
    

3. 注意事项

  • 升级前务必再次备份所有数据卷(SonarQube的data、extensions、logs和PostgreSQL数据),避免数据丢失。
  • 检查8.9版本中安装的插件,移除不兼容的插件后再升级到9.9,避免插件冲突导致启动失败。
  • SonarQube 9.9对系统资源要求更高,建议给Docker分配至少2GB内存,避免内存不足导致服务异常。

内容的提问来源于stack exchange,提问作者Ganesh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 20:44:57