在 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 镜像上硬编码包版本的主要内容,如果未能解决你的问题,请参考以下文章