错误:在 dockerfile 中使用 apk 的约束无法满足

新手上路,请多包涵

我正在尝试将 postgis 安装到 postgres 容器中。 Dockerfile:

 FROM postgres:9.6.4-alpine

RUN apk update \
    && apk add -u postgresql-9.6-postgis-2.4 postgresql-9.6-postgis-2.4-scripts \
    && rm -rf /var/lib/apt/lists/*

COPY ./scripts/postgis.sh  /docker-entrypoint-initdb.d/postgis.sh

postgis.sh:

 #!/bin/sh

for DB in $(psql -t -c  "SELECT datname from pg_database where datname = 'backend'"); do
    echo "Loading PostGIS extensions into $DB"
    "${psql[@]}" --dbname="$DB" <<-'EOSQL'
        CREATE EXTENSION IF NOT EXISTS postgis;
EOSQL
done

我收到了这个错误:

错误:不可满足的约束:postgresql-9.6-postgis-2.4(缺失):要求:world[postgresql-9.6-postgis-2.4] postgresql-9.6-postgis-2.4-scripts(缺失):要求:world[postgresql-9.6 -postgis-2.4-scripts] 命令 ‘/bin/sh -c apk update && apk add -u postgresql-9.6-postgis-2.4 postgresql-9.6-postgis-2.4-scripts && rm -rf /var/lib/apt/ lists/*’ 返回一个非零代码:2

我发现了类似的问题,例如:

  1. 错误:无法满足的约束:在 alpine 中安装软件包时
  2. 错误:无法满足的约束 - 在 php:7-fpm-alpine

但这并没有解决我的问题。如何使用 apk 将 postgis 扩展添加到我的 postgres 容器中?

原文由 Slim 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 486
2 个回答

Postgis 软件包仅在 edge alpine repo 中可用,而不是在稳定版中。这就是为什么您会收到“不可满足的约束”错误。

但无论如何,您可以从 edge repo 安装 postgis

 # echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

# apk update
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
WARNING: This apk-tools is OLD! Some packages might not function properly.
v3.5.2-254-g9d4623dc57 [http://dl-cdn.alpinelinux.org/alpine/v3.5/main]
v3.5.2-247-gc85efb30e1 [http://dl-cdn.alpinelinux.org/alpine/v3.5/community]
v3.7.0-2163-ge03552fc58 [http://dl-cdn.alpinelinux.org/alpine/edge/testing]
OK: 10930 distinct packages available

# apk search --no-cache postgis
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.5/community/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/edge/testing/x86_64/APKINDEX.tar.gz
WARNING: This apk-tools is OLD! Some packages might not function properly.
postgis-dev-2.4.1-r1
postgis-2.4.1-r1
postgis-doc-2.4.1-r1

所以,最终的 Dockerfile 是:

 FROM postgres:9.6.4-alpine

RUN echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories

RUN apk update \
    && apk add -u postgis \
    && rm -rf /var/lib/apt/lists/*

COPY ./scripts/postgis.sh  /docker-entrypoint-initdb.d/postgis.sh

2020 年 1 月 23 日更新:

从 Alpine 版本 3.11 开始, Postgis 可在主要和社区存储库中使用:

 / # cat /etc/os-release
NAME="Alpine Linux"
ID=alpine
VERSION_ID=3.11.3
PRETTY_NAME="Alpine Linux v3.11"
HOME_URL="https://alpinelinux.org/"
BUG_REPORT_URL="https://bugs.alpinelinux.org/"
/ #
/ # apk search --no-cache postgis
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/main/x86_64/APKINDEX.tar.gz
fetch http://dl-cdn.alpinelinux.org/alpine/v3.11/community/x86_64/APKINDEX.tar.gz
postgis-3.0.0-r1
postgis-doc-3.0.0-r1

对于 Alpine 版本 3.11 及更高版本,您不需要使用边缘 repo 测试分支。

原文由 nickgryg 发布,翻译遵循 CC BY-SA 4.0 许可协议

老的:

 apk add --no-cache curl jq python py-pip

新的:

 apk add --no-cache curl jq python3 py3-pip

原文由 DV Singh 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进