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

