【问题标题】:Install specific version of apt package for specific ubuntu version为特定的 ubuntu 版本安装特定版本的 apt 包
【发布时间】:2018-10-02 03:32:25
【问题描述】:

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

所以我的 Dockerfile 有这个:

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

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

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

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

【问题讨论】:

  • 我正在寻找一种编程方式来做到这一点。但是也有一种肮脏的方法可以做到这一点:运行容器,shell 进入其中,然后运行 ​​apt-get update && apt-cache policy foo 以显示该 ubuntu 版本的最新版本。

标签: docker ubuntu dockerfile apt


【解决方案1】:

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

但是,如果您想以适当的方式以编程方式获取此版本信息,您可以依赖Launchpad API,它带有官方的API client implemented as a Python library。

否则,您可以直接使用curl和jq等工具查询API(解析检索到的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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-01-04
    • 2013-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-09-26
    • 1970-01-01
    • 1970-01-01
    • 2012-05-18
    相关资源
    最近更新 更多