为什么在安装较旧版本的Node.js时Alpine apk会报告“无法满足的约束”?


3

我正在尝试在Alpine上安装旧版本的Node.js(4.4.4)。这是我的命令:

apk update
apk add nodejs-lts=4.4.4-r0

执行时,出现错误(以root身份运行,因为我使用的是Alpine:3.4 Docker映像):

/ # apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.4/community/x86_64/APKINDEX.tar.gz
v3.4.6-64-gd029d25 [http://dl-cdn.alpinelinux.org/alpine/v3.4/main]
v3.4.6-33-g38ef2d2 [http://dl-cdn.alpinelinux.org/alpine/v3.4/community]
OK: 5977 distinct packages available
/ # apk add nodejs-lts=4.4.4-r0
ERROR: unsatisfiable constraints:
  nodejs-lts-4.6.0-r0:
    breaks: world[nodejs-lts=4.4.4-r0]

如何在中安装特定的较旧版本的软件包apk

Answers:


7

那是对的。不幸的是,4.4.4不可用。

除非控制自己的程序包镜像和程序包构建,否则应避免在程序包版本上明确,而应允许程序包系统为使用中的Alpine版本处理它。

对于Alpine 3.4,仅4.6.0可用。在线搜索Alpine 3.4 x86_64软件包中的nodejs-lts

如果您愿意,可以在这里更改软件包的源,以构建特定的选择版本。

查看软件包源

Alpine有一个Wiki页面:创建Alpine软件包

请注意,不建议使用“ nodejs-lts”软件包名称。

提供=“ nodejs-lts = $ pkgver”#用于向后兼容

replaces =“ nodejs-current nodejs-lts”#nodejs-lts具有向后兼容性


得到它了。感谢您的解释。这将是常见问题解答的不错的选择。
马修·亚当斯

1
所以不可能固定版本吗?为了使容器图像变得不可变/
WHITECOLOR

0

您可以使用以下版本使用以前的阿尔卑斯版本的特定版本,其示例alia-lib-dev在alpine edge中设置为1.1.7-r0,但在此处从alpine 3.8强制为1.1.6-r0:

apk add --no-cache --update-cache --repository http://nl.alpinelinux.org/alpine/v3.8/main alsa-lib-dev=1.1.6-r0

0

不幸的是,当有较新版本可用时,Alpine-Linux软件包管理会删除较旧的软件包。这使得很难将Alpine Linux与docker结合使用,因为您需要具有精确版本的可复制映像。

有关完整的摘要,请参见本文。提供了两种解决方案:创建您自己的镜像并托管您希望继续访问的特定版本的软件包(可能不值得)或使用其他基本映像(例如Ubuntu),而不会删除较旧的版本软件包(如任何现代软件包管理系统所期望的那样)。

而且我想您可以只更新docker文件以使用这些软件包的最新可用版本,但只知道它可能只是时间问题,然后您再次遇到这种情况。如果您要构建生产系统,那么它就无法扩展。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.