web-dev-qa-db-fra.com

ERREUR: contraintes insatisfiables utilisant apk dans dockerfile

J'essaie d'installer Postgis dans un conteneur 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

J'ai eu cette erreur:

ERREUR: contraintes non satisfaisantes: postgresql-9.6-postgis-2.4 (manquant): requis par: world [postgresql-9.6-postgis-2.4] postgresql-9.6-postgis-2.4-scripts (manquant): requis par: world [postgresql-9.6 -postgis-2.4-scripts] La commande '/ bin/sh -c apk mise à jour & apk add -u postgresql-9.6-postgis-2.4 postgresql-9.6-postgis-2.4-scripts && rm -rf/var/lib/apt/lists/* 'a renvoyé un code non nul: 2

J'ai trouvé des questions similaires telles que:

  1. ERREUR: contraintes insatisfiables: lors de l'installation du package dans Alpine
  2. ERREUR: contraintes insatisfiables - sur php: 7-fpm-Alpine

Mais cela ne résout pas mon problème. Comment puis-je ajouter l'extension postgis à mon conteneur postgres avec apk?

12
Slim

Postgis Le package est uniquement disponible dans le référentiel Edge Alpine, pas dans un stable. C'est pourquoi vous obtenez une erreur "contraintes insatisfiables".

Quoi qu'il en soit, vous pouvez installer postgis à partir du référentiel Edge:

# 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

Donc, le dernier Dockerfile est:

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
12
Nickolay