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

Jenkins Docker构建代理未安装Java 8却被检测到的原因排查

背景

我在Ubuntu 18.04上运行的Jenkins服务器使用Java 11版本,可通过访问*/manage/systemInfo*查看:

java.specification.version 11

我基于Ubuntu 22.04实现了Docker构建代理,并指定安装Java 11版本:

# install java for Jenkins
RUN apt-get install -qy openjdk-11-jdk

我发现所有构建节点都处于离线状态,查看日志后发现以下错误:

Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.UnsupportedClassVersionError: hudson/remoting/Launcher has been compiled by a more recent version of the Java Runtime (class file version 55.0), this version of the Java Runtime only recognizes class file versions up to 52.0

根据Java类文件格式主版本号列表:类版本52对应Java 8,55对应Java 11。

进一步查看日志发现:

[11/14/22 18:35:38] [SSH] Checking java version of java
[11/14/22 18:35:38] [SSH] java -version returned 1.8.0_312.

因此我开始排查问题根源:

排查尝试

执行sudo docker container exec 20e1bfe2b182 ls -l /usr/bin/java返回:

/usr/bin/java -> /etc/alternatives/java

执行sudo docker container exec 20e1bfe2b182 ls -l /etc/alternatives/java返回:

/etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java

我还在Dockerfile中安装openjdk的步骤前加入RUN java -version,结果显示未安装Java。

在宿主机执行apt list --installed |grep jdk返回:

openjdk-11-jdk/bionic-updates,bionic-security,now 11.0.17+8-1ubuntu2~18.04 amd64 [installed]
openjdk-11-jdk-headless/bionic-updates,bionic-security,now 11.0.17+8-1ubuntu2~18.04 amd64 [installed]
openjdk-11-jre/bionic-updates,bionic-security,now 11.0.17+8-1ubuntu2~18.04 amd64 [installed]
openjdk-11-jre-headless/bionic-updates,bionic-security,now 11.0.17+8-1ubuntu2~18.04 amd64 [installed,automatic]

在Docker镜像中执行相同命令得到类似结果;从/目录执行find -name java* 2>/dev/null也未找到有效信息。

which java输出

宿主机:

$ which java
/usr/bin/java
$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 24 2018 /usr/bin/java -> /etc/alternatives/java
$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 Jan 25 2022 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java

Docker容器:

$ sudo docker compose run man which java
/usr/bin/java
$ sudo docker compose run man ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Nov 14 20:28 /usr/bin/java -> /etc/alternatives/java
$ sudo docker compose run man ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 43 Nov 14 20:28 /etc/alternatives/java -> /usr/lib/jvm/java-11-openjdk-amd64/bin/java

echo $PATH输出

宿主机

$ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Docker容器

$ sudo docker compose run man echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games

临时解决方案

在Dockerfile中添加以下内容似乎可解决问题:

RUN ln -s /usr/lib/jvm/java-11-openjdk-amd64/ /home/jenkins/jdk
RUN chown jenkins:jenkins /home/jenkins/jdk
问题

请问未安装的Java 8版本是从哪里来的?


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:20:37