postgresql - Docker 容器中 Alpine Linux (arm32v6) 上的 PostgreSQL 9.6.9 - 如何安装正确的 postgresql-contrib 包?
问题描述
我需要在 32 位 ARM 系统上的 Docker 容器中安装支持 uuid-ossp 的 PostgreSQL 9.6.9(它是 QNAP NAS,CPU:Annapurna Labs Alpine AL-314)。
我找到了arm32v6/postgres图像并安装了arm32v6/postgres:9.6.9-alpine
. 这工作顺利,但缺少 postgresql-contrib 包。据我了解,我需要安装 postgresql-contrib 以获得 uuid-ossp 支持。
我在容器中打开了一个 CLI 并尝试:
# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/main/armhf/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.7/community/armhf/APKINDEX.tar.gz
v3.7.0-215-g16971064c0 [http://dl-cdn.alpinelinux.org/alpine/v3.7/main]
v3.7.0-207-gac61833f9b [http://dl-cdn.alpinelinux.org/alpine/v3.7/community]
OK: 8879 distinct packages available
# apk add postgresql-contrib=9.6.9-r0
ERROR: unsatisfiable constraints:
postgresql-contrib-10.4-r0:
breaks: world[postgresql-contrib=9.6.9-r0]
如何安装正确版本的 postgresql-contrib?或者我可以将 postgresql-contrib-10.4-r0 与 PostgreSQL 9.6.9 一起使用吗?
解决方案
只需使用基本的 alpine 映像并完全从 Alpine 的官方软件包安装 PostgreSQL:postgresql
和postgresql-contrib
. 最后一个提供 PostgreSQL 9.6 的稳定 Alpine 是 v3.6,它落后了两个版本,但仍然受支持。Alpine v3.7 仅提供 10.4。
也不要指定确切的版本apk add
。Alpine 只为每个分支提供单一版本的包(例如 v3.7、v3.8、edge)。一旦我们发布 postgresql-contrib 9.6.9-r1 或 9.6.10-r0(例如修复一些安全问题),9.6.9-r0 将不再可用,您apk add postgresql-contrib=9.6.9-r0
将失败。
这些专门的 Docker 镜像“打包”了一些已经在 Alpine 中正确打包的东西,几乎完全没有用,只会引起混乱和问题。我什至无法计算我在 SO 上回复此类问题的次数。
推荐阅读
- javascript - 如何跨突变将新附加值添加到状态?
- python-3.x - 从python中的列表中删除子列表
- python - 用于在 Selenium 中读取与切换开关相关的文本标签的 Python 代码
- javascript - 我可以在 JavaScript 中使用 System.Drawing.Color 吗?
- java - 在 Spring 应用程序中使用 JPA 连接多个表时从数据库获取最近更新的结果
- apache-kafka - Kafka 处理器 API,每条处理的记录只有一次语义
- android - 构建一个签名的 Apk
- ios - 使用 pushViewController 时出现“致命错误:在展开可选值时意外发现 nil”
- php - PHP urlencode 返回意外结果
- python - Conda 列表未在虚拟环境中显示包