Docker镜像安装OpenJDK9与Gradle4.5.1失败求助
排查Docker构建失败:无法安装OpenJDK 9的问题
嘿,我来帮你搞定这个问题!首先,你遇到的返回码100是apt-get的典型错误,意思是它找不到你要安装的openjdk-9-jdk-headless包。这不是你的指令写错了,而是Ubuntu最新版(ubuntu:latest)的软件源里已经没有OpenJDK 9了——OpenJDK 9是短期支持版本,早在2018年就停止维护了,主流Linux发行版的官方仓库都把它移除了。
另外,你的Dockerfile还有两个小问题需要调整:
CMD /bin/bash放在了Gradle安装步骤前面,虽然构建时还会执行后面的指令,但这不符合最佳实践,应该把容器启动命令放在最后。MAINTAINER指令已经被Docker官方弃用了,现在推荐用LABEL maintainer="..."来替代。
修复方案
方案1:直接用官方OpenJDK 9镜像(推荐)
如果必须用OpenJDK 9,最省心的方式是直接用官方提供的OpenJDK 9镜像,不用自己手动折腾安装:
FROM openjdk:9-jdk-slim LABEL maintainer="Hari Sekhon" LABEL Description="Java + Ubuntu (OpenJDK)" # 安装Gradle 4.5.1,顺便清理冗余工具减小镜像体积 RUN apt-get update && apt-get install -y --no-install-recommends wget unzip \ && wget -q https://services.gradle.org/distributions/gradle-4.5.1-bin.zip \ && unzip gradle-4.5.1-bin.zip -d /opt \ && rm gradle-4.5.1-bin.zip \ && apt-get purge -y --auto-remove wget unzip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 配置Gradle环境变量 ENV GRADLE_HOME /opt/gradle-4.5.1 ENV PATH $PATH:$GRADLE_HOME/bin CMD /bin/bash
方案2:用旧版Ubuntu(不推荐,安全性低)
如果你坚持要基于Ubuntu构建,可以用还保留OpenJDK 9包的旧版Ubuntu,比如ubuntu:18.04(但这个版本也快停止维护了,安全性没保障):
FROM ubuntu:18.04 LABEL maintainer="Hari Sekhon" LABEL Description="Java + Ubuntu (OpenJDK)" ENV DEBIAN_FRONTEND noninteractive ARG JAVA_VERSION=9 ARG JAVA_RELEASE=JDK # 修正JAVA_HOME到正确的路径 ENV JAVA_HOME=/usr/lib/jvm/java-9-openjdk-amd64 RUN set -euxo pipefail && \ apt-get update && \ pkg="openjdk-$JAVA_VERSION"; \ if [ "$JAVA_RELEASE" = "JDK" ]; then \ pkg="$pkg-jdk-headless"; \ else \ pkg="$pkg-jre-headless"; \ fi; \ apt-get install -y --no-install-recommends "$pkg" && \ apt-get clean && \ rm -rf /var/lib/apt/lists/* # 安装Gradle并清理冗余 RUN apt-get update && apt-get install -y --no-install-recommends wget unzip \ && wget -q https://services.gradle.org/distributions/gradle-4.5.1-bin.zip \ && unzip gradle-4.5.1-bin.zip -d /opt \ && rm gradle-4.5.1-bin.zip \ && apt-get purge -y --auto-remove wget unzip \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* # 配置Gradle环境变量 ENV GRADLE_HOME /opt/gradle-4.5.1 ENV PATH $PATH:$GRADLE_HOME/bin CMD /bin/bash
额外提示
- 官方OpenJDK镜像经过优化,更可靠,还能帮你省掉手动安装JDK的麻烦,优先选方案1准没错。
- 安装Gradle时我们加了清理步骤,删掉了临时用的
wget和unzip,还清理了apt缓存,这样能让镜像体积小很多,这是Docker构建的最佳实践哦。 - 原Dockerfile里把
JAVA_HOME设为/usr是不对的,方案2里已经修正成了正确的路径。
内容的提问来源于stack exchange,提问作者EladS
相关产品推荐
相关产品推荐

