在 docker 镜像上硬编码包版本

Posted

技术标签:

【中文标题】在 docker 镜像上硬编码包版本【英文标题】:Hardcoding packages versions on docker image 【发布时间】:2021-04-15 12:43:58 【问题描述】:

是否有一种已知的方法来跟踪 docker 映像上已安装软件包的版本?我安装了一些示例包

FROM docker.io/debian:bullseye
RUN   apt-get update && \
      apt-get install -y --no-install-recommends ca-certificates tar ... && \
      apt-get upgrade -y libc6

现在我无法控制使用哪些包版本。从同一个 dockerfile 构建两次可能会产生不同的结果。事情可能会突然开始崩溃,我不知道库的最后一个工作版本是什么。

我无法对版本进行硬编码,例如

apt-get upgrade -y libc6=2.31-6

因为 Bullseye 中可用的版本在不断变化。并且在接下来的几天内,2.31-6 将无法使用。

使用通配符也没有意义。

【问题讨论】:

【参考方案1】:

简单的方法是切换到debian:buster,它是当前最新的 Debian 稳定版本。稳定版本的软件包很少更改(bullseye 不稳定)。

困难的方法是从其他专用存储库获取包\源,然后从源安装或构建它们。例如https://deb.sury.org/ 有任何版本的 php。如果添加到apt,则可以选择要安装的PHP。

【讨论】:

但是debian:buster 有很多漏洞,即使是高严重性:CVE-2018-12886、CVE-2020-8285、CVE-2020-8286、CVE-2019-19449、CVE-2020-36158 、CVE-2019-19814、CVE-2020-29569、CVE-2020-11725、CVE-2020-29661、CVE-2020-2937 以及更多中低级问题。额外的存储库对我来说是一个不错的选择。我希望我能找到我需要的所有软件包的更改存储库。谢谢。 @LancerX 你应该看看 Ubuntu。它基于 Debian,但它有频繁的更新和安全补丁。这比使用不稳定的版本要好。

以上是关于在 docker 镜像上硬编码包版本的主要内容,如果未能解决你的问题,请参考以下文章

Settings.bundle 名称仍然是硬编码的?

Lint报告“命名空间中的硬编码包”

docker镜像制作压缩及镜像加载

在 git push 上硬重置

为啥 sbt-native-packager 在分发包中生成硬编码的***父目录?

maven构建docker镜像三部曲之二:编码和构建镜像