首页 > 解决方案 > 为特定的 ubuntu 版本安装特定版本的 apt 包

问题描述

我想在 docker 容器中安装软件包foo版本。1234与最新版本相比,我更喜欢它,因为它总是以相同的方式工作。

所以我的 Dockerfile 有这个:

RUN apt-get update && apt-get install -y foo=1234

但基础镜像是mongodb:4.0.2,它在 Ubuntu xenial 上分层。

当我构建映像时,apt install 失败,因为它找不到该版本。我认为 xenial 不支持该版本。

那么如何foo在 xenial 上找到最新支持的软件包版本?如果我运行apt policy foo它,它会显示我正在使用的 ubuntu 的最新版本(仿生),而不是 xenial。

标签: dockerubuntudockerfileapt

解决方案


如果涉及的包是,例如rlwrap,你可以看看网页https://packages.ubuntu.com/xenial/rlwrap

但是,如果您想以适当的方式以编程方式获取此版本信息,您可以依赖Launchpad API,它带有一个作为 Python 库实现的官方 API 客户端

curl否则,您可以使用 和等工具直接查询 API jq(以解析检索到的 JSON 数据):

$ curl -fsSL "https://api.launchpad.net/1.0/ubuntu/+archive/primary?ws.op=getPublishedSources&source_name=rlwrap&exact_match=true&distro_series=https://api.launchpad.net/1.0/ubuntu/xenial" \
  | jq --raw-output ".entries | .[0] | .source_package_version"

→ 0.41-1build1

正如在这个Askubuntu question中提到的,Debian 也存在类似的 API。


推荐阅读