【问题标题】:ERROR: unsatisfiable constraints using apk in dockerfile错误:在 dockerfile 中使用 apk 的约束无法满足
【发布时间】:2018-07-31 05:44:53
【问题描述】:

我正在尝试将 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-scripts(缺失): 要求: 世界[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. ERROR: unsatisfiable constraints: while installing package in alpine
  2. ERROR: unsatisfiable constraints - on php:7-fpm-alpine

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

【问题讨论】:

    标签: docker alpine alpine-package-keeper


    【解决方案1】:

    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 日更新:

    Postgis 从 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 repo 测试分支。

    【讨论】:

    • 按照您的说明操作时出现以下错误:postgis (missing): ERROR: unsatisfiable constraints: required by: world[postgis]。我使用了以下命令:echo "http://dl-cdn.alpinelinux.org/alpine/edge/testing" &gt;&gt; /etc/apk/repositories &amp;&amp; apk update &amp;&amp; apk add -u postgis &amp;&amp; rm -rf /var/lib/apt/lists/*
    • 我也尝试在 Alpine 图像上直接安装 PostGIS,但偶然发现了类似的问题。我发布了a question 关于它。如果您能提供帮助,我将不胜感激。
    • @mhyousefi 我已经更新了我的答案。自从我回答这个问题以来,阿尔卑斯世界已经发生了一些变化。
    【解决方案2】:

    旧:

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

    新:

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

    【讨论】:

      【解决方案3】:

      这很奇怪,但在我的情况下,解决方案就像运行一样简单:

      sudo systemctl restart docker
      

      ...在您运行 docker 容器的机器上

      【讨论】:

        猜你喜欢
        • 2020-08-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-06-28
        • 2012-12-28
        • 2021-12-07
        • 1970-01-01
        相关资源
        最近更新 更多