我正在创建一个运行与特定 Java 版本相关联的自定义应用程序的 dockerfile。
我正在使用 centos7 基本映像,因为这是我所指的一篇文章所使用的,而且因为我必须使用某些东西,所以它与任何文章一样好。老实说,我不在乎我使用的是什么用户空间。这张图片的重点是托管的软件,Linux 发行版本身只是达到目的的一种手段——重要的是,JDK 不会被其他应用程序或用户使用。
如上所述,我的应用程序与我正在使用的特定 Java 版本相关联 - 对 Java 版本的任何更新都需要在发布之前对该特定版本的软件进行全面回归测试。
我所关注的文章从相关的 dockerfile JDK 安装部分开始,如下所示:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel \
&& yum clean all
Run Code Online (Sandbox Code Playgroud)
这还不够具体,任何时候构建图像都会得到一个随机版本的 Java,这不是我想要的,我需要一个特定版本的 Java。
我将 docker 文件更改为如下所示:
FROM centos:centos7
RUN yum makecache \
&& yum update -y \
&& yum install -y \
java-1.8.0-openjdk-devel-1.8.0.65-3.b17.el7 \
&& yum clean all
Run Code Online (Sandbox Code Playgroud)
并且 docker 镜像构建良好。那是在十二月。
本周,我需要对软件的不同部分进行小的更改并重新构建映像的新版本,但映像构建现在失败了。
构建现在失败,因为该特定版本的 java 包不再可用(至少,我认为这就是它告诉我的):
Error: Package: 1:java-1.8.0-openjdk-1.8.0.65-3.b17.el7.x86_64 …Run Code Online (Sandbox Code Playgroud)