例如,在 alpine 上安装 apk 时可以指定版本apk add ffmpeg=3.0.7-r0
。在容器中,这是一种典型的情况,因为你想要一种不可变的东西,所以你在 Docker 文件中添加:
RUN apk add --no-cache ffmpeg=3.0.4-r1
问题是,一段时间后你可能会收到类似这样的错误:
ERROR: unsatisfiable constraints:
ffmpeg-3-0.7.0-r0:
breaks: world[ffmpeg=3.0.4-r1]
因此需要更改版本并重新安装包。我读到过设置版本约束并不安全,因为版本可能会从 repo 中删除,建议不要指定版本并“让 apk 处理它”——对我来说这真的很奇怪,也许我没有得到一些东西。如果删除版本,那么你得到的实际上不是不可变的,不同机器上可能不同的东西最终会得到错误。
获取安装了此类包的容器的不可变版本的策略是什么?
答案1
使用 apk 时不可能,但从源代码构建程序允许定义特定版本。查看官方 nodejs 图像以获取示例。它们从源代码构建以维护特定的 nodejs 版本