如何获取 Alpine apk 包的“版本锁定文件”?(轻松锁定软件包版本)

Bir*_*abs 6 alpine-linux

我在 Docker 容器中使用 Alpine Linux 3.7。
我正在apkDockerfile 中执行一些命令。

我已成功将我的依赖项固定到特定的主要版本:

apk add --no-cache \
'openssl<2' \
'freeradius<4' \
'freeradius-mysql<4'
Run Code Online (Sandbox Code Playgroud)

但该命令的确切行为对于该命令运行的时间(即构建 Docker 映像的时间)很敏感。apk add

在撰写本文时,这些限制已解决:

apk add --no-cache \
'openssl=1.0.2m-r0' \
'freeradius=3.0.15-r3' \
'freeradius-mysql=3.0.15-r3'
Run Code Online (Sandbox Code Playgroud)

如果我apk add 'dep<majver' 明年跑步,可能会得到不同的结果。

  • 我不希望我的依赖项在我不知情的情况下更改版本。
    • 是的,连小版本都没有。我不相信 semver 100% 可以保证我免受破坏性更改/回归的影响,因此更改次要版本只能在监督下进行。
  • 我不想手写确切的版本分辨率(dep=ver)。'dep<majver'是优选的。

诸如npm和 之类的包管理器yarn对此有一个很好的解决方案。版本锁定文件。

您将有两个受版本控制的文档:

  • 一份手动创建的文档来表达'dep<majver'
  • 一个版本的锁定文件,表达(对于每个依赖项)dep=ver满足您所有约束的特定解决方案。
    • 这将是机器生成的。仅当您想要将每个依赖项更新为满足您的约束的最新版本时,您才会故意'dep<majver'重新生成它。

是否有某种 Alpine apk 概念可以发挥“版本锁定文件”的作用?

有一个明显的Docker解决方案:apk add 'dep<majver'单独的Dockerfile 中执行该步骤。使用该 Dockerfile 作为基础映像。仅当您准备好增加依赖项时才重建基础 Docker 映像。

但我很好奇是否有Alpine apk解决方案,因为这可以被视为包管理问题,而不是配置问题。