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

Docker部署SonarQube失败:ElasticSearch进程退出码1求助

问题描述

尝试通过Docker部署SonarQube,执行以下命令:

sudo docker pull sonarqube
sudo docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube

执行sudo docker ps -a查看容器状态,SonarQube容器始终处于退出状态:

CONTAINER ID   IMAGE                                                    COMMAND                 STATUS                        PORTS               
c76d3a0ee7db   sonarqube                                             "/opt/sonarqube/bin/…"     Exited (0) 26 seconds ago    
aa6eebb7d9d5   docker.elastic.co/elasticsearch/elasticsearch:8.6.0   "/bin/tini -- /usr/l…"     Up 2 minutes                 0.0.0.0:9200->9200/tcp, 9300/tcp 

查看Docker日志显示:

2023.01.20 08:13:04 INFO app[][o.s.a.AppFileSystem] Cleaning or creating temp directory /opt/sonarqube/temp
2023.01.20 08:13:04 INFO app[][o.s.a.es.EsSettings] Elasticsearch listening on [HTTP: 127.0.0.1:9001, TCP: 127.0.0.1:33739]
2023.01.20 08:13:04 INFO app[][o.s.a.ProcessLauncherImpl] Launch process[ELASTICSEARCH] from [/opt/sonarqube/elasticsearch]:
/opt/sonarqube/elasticsearch/bin/elasticsearch
could not find java in ES_JAVA_HOME at
/usr/lib/jvm/java-17-openjdk/bin/java
2023.01.20 08:13:04 WARN app[][o.s.a.p.AbstractManagedProcess] Process exited with exit value [ElasticSearch]: 1
2023.01.20 08:13:04 INFO app[][o.s.a.SchedulerImpl] Process[ElasticSearch] is stopped
2023.01.20 08:13:04 INFO app[][o.s.a.SchedulerImpl] Waiting for Elasticsearch to be up and running
2023.01.20 08:13:04 INFO app[][o.s.a.SchedulerImpl] SonarQube is stopped

需要解决Docker部署SonarQube时ElasticSearch进程因找不到Java而退出的问题。

解决方案

从日志可以明确,容器内ElasticSearch无法找到指定路径的Java环境,以下是几种直接有效的解决方法:

1. 指定兼容的SonarQube镜像版本

默认的sonarqube镜像可能存在Java路径配置问题,建议使用长期支持(LTS)版本,这类镜像的Java环境配置更稳定:

# 清理现有容器
sudo docker stop sonarqube && sudo docker rm sonarqube
# 拉取9.9 LTS社区版并启动
sudo docker pull sonarqube:9.9-community
sudo docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 sonarqube:9.9-community

2. 手动设置正确的ES_JAVA_HOME路径

如果必须使用当前镜像,先进入容器确认实际Java位置:

# 启动临时交互容器
sudo docker run -it --rm sonarqube /bin/bash
# 查找Java路径
which java

退出容器后,用查到的路径启动正式容器(替换<实际Java路径>为你得到的结果,比如/usr/bin/java):

sudo docker run -d --name sonarqube -p 9000:9000 -p 9092:9092 -e ES_JAVA_HOME=<实际Java路径> sonarqube

3. 排查自定义挂载导致的冲突

如果启动容器时挂载了宿主机的Java目录,可能引发路径不匹配问题。此时要么取消该挂载,要么确保挂载的Java版本符合ElasticSearch要求(SonarQube内置ElasticSearch通常需要Java 17及以上版本)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 20:45:57