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

错误:在dockerfile中使用apk时无法满足约束,docker,alpine,alpine-package-keeper,Docker,Alpine,Alpine Package Keeper,我正在尝试将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 /do

我正在尝试将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: 要求: 世界[postgresql-9.6-postgis-2.4] 缺少postgresql-9.6-postgis-2.4-脚本: 要求: 世界[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

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

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

软件包仅在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是:

更新日期:2020年1月23日:

从Alpine 3.11版开始,在主存储库和社区存储库中提供:

/ # 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及更高版本,您不需要使用edge回购测试分支。

旧版:

apk add --no-cache curl jq python py-pip
新的:


这很奇怪,但在我的案例中,解决方案非常简单:

sudo systemctl restart docker

。。。在运行docker容器的计算机上

按照您的说明操作时,我会遇到以下错误:postgis缺失:错误:不可满足的约束:world[postgis]所需。我使用了以下命令:echohttp://dl-cdn.alpinelinux.org/alpine/edge/testing >>/etc/apk/repositories&&apk update&&apk add-u postgis&&rm-rf/var/lib/apt/lists/*我也曾尝试直接在阿尔卑斯山图像上安装postgis,但也遇到了类似的问题。我把它贴了出来。非常感谢您的帮助。@mhyousefi我已经更新了我的答案。自从我回答这个问题以来,阿尔卑斯世界已经发生了一些变化。
apk add --no-cache curl jq python3 py3-pip
sudo systemctl restart docker