从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
相关产品推荐
相关产品推荐

