Docker构建Ubuntu镜像安装OpenJDK报错及Maven命令找不到问题求助
问题排查与解决方案
1 Ubuntu 16.04 基础镜像构建失败原因
- Ubuntu 16.04 属于*已终止生命周期(EOL)*的发行版本,官方默认源已从
archive.ubuntu.com迁移至old-releases.ubuntu.com,且你使用的webupd8team/java等第三方PPA早已停止维护下线,因此会出现PPA密钥拉取超时、软件包下载超时的报错,不建议继续使用该镜像作为基础镜像。
2 openjdk:8 基础镜像mvn不存在报错原因
openjdk:8 默认基于Debian发行版,出现mvn: not found的核心原因是apt-get install -y maven步骤实际未执行成功:
- 默认Debian官方源在国内访问速度极慢,容易出现断连超时,导致maven包未正常安装完成,多步拆分的
apt-get update操作会命中部分缓存,掩盖了实际安装失败的报错。
3 最优可用Dockerfile方案
直接使用官方预装JDK8与Maven的镜像作为基础,无需自行安装JDK和Maven,彻底规避源访问问题:
# 官方预装jdk8和maven的基础镜像 FROM maven:3.8-jdk-8 LABEL "Maintainer"="AdityaGoel" # 合并安装其他依赖,清理apt缓存减小镜像体积 RUN apt-get update && apt-get install -y --no-install-recommends \ iputils-ping \ vim \ default-mysql-client \ && rm -rf /var/lib/apt/lists/* # 配置工作目录 WORKDIR /usr/local/docker-git-helloworld ADD . . RUN mvn assembly:assembly # 启动命令 CMD ["java", "-cp", "/usr/local/docker-git-helloworld/target/docker-git-helloworld-1.0-SNAPSHOT-jar-with-dependencies.jar", "dockerLearn.TestFile"]
补充优化说明:
- 合并所有apt安装命令,执行结束后删除apt缓存,可大幅减小最终镜像体积
- 使用
WORKDIR指令替代手动执行cd命令,符合Dockerfile编写规范
4 需自行安装依赖的临时解决方案
如果必须基于openjdk:8自行安装所有软件,可在安装前替换为国内apt源解决下载超时问题,示例如下:
FROM openjdk:8 LABEL "Maintainer"="AdityaGoel" # 替换为国内阿里Debian源,解决依赖下载超时问题 RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ && sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list \ && apt-get update \ && apt-get install -y --no-install-recommends \ software-properties-common \ iputils-ping \ vim \ default-mysql-client \ maven \ && rm -rf /var/lib/apt/lists/* ADD . /usr/local/docker-git-helloworld RUN cd /usr/local/docker-git-helloworld && mvn assembly:assembly CMD ["java", "-cp", "/usr/local/docker-git-helloworld/target/docker-git-helloworld-1.0-SNAPSHOT-jar-with-dependencies.jar", "dockerLearn.TestFile"]
内容的提问来源于stack exchange,提问作者Aditya Goel
相关产品推荐
相关产品推荐

