docker - 为特定的 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。
解决方案
如果涉及的包是,例如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。
推荐阅读
- ios - 在 iOS 设备上写入描述符 BLE
- sql-server - SSIS 检测变化
- c# - task.run 为 c# 并行运行
- c# - 使用 Dapper 从 C# 调用存储过程时遇到问题
- mysql - Aurora 无服务器未从 CLI 和 mysql workbrench 连接
- ios - Xcode 10 (10A255) 错误:
:0: 错误:重复的输入文件 - c# - EF CORE 无时间戳的乐观并发
- copy - 如何复制 eststo
- javascript - 如何在 firebase 数据库中获取 push() 的引用?
- hangouts-chat - 单击 Google Chat Bot 交互按钮时出错