Docker 为特定ubuntu版本安装特定版本的apt软件包

Docker 为特定ubuntu版本安装特定版本的apt软件包,docker,ubuntu,dockerfile,apt,Docker,Ubuntu,Dockerfile,Apt,我想在docker容器中安装包fooversion1234。与最新版本相比,我更喜欢这个版本,因为它总是以同样的方式工作 因此,我的Dockerfile有以下内容: RUN apt-get update && apt-get install -y foo=1234 但基本图像是,它是在Ubuntu xenial上分层的 当我构建映像时,apt安装失败,因为它找不到该版本。我认为xenial不支持这个版本 那么如何在xenial上找到受支持的包foo的最新版本呢?如果我运行apt

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

因此,我的Dockerfile有以下内容:

RUN apt-get update && apt-get install -y foo=1234
但基本图像是,它是在Ubuntu xenial上分层的

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


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

如果关键的软件包是,比如说,
rlwrap
,你可以看看网页

但是如果你想通过编程的方式获得这个版本的信息,你可以依靠官方提供的

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


如本文所述,Debian也有类似的API。

我正在寻找一种编程方式来实现这一点。但也有一种肮脏的方法可以做到这一点:运行容器,将shell放入其中,然后运行
apt-get-update&&apt-cache-policy-foo
来显示该ubuntu版本的最新版本。
$ 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