web-dev-qa-db-ja.com

エラー: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(missing):必要なもの: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でpostgresコンテナーにpostgis拡張機能を追加するにはどうすればよいですか。

12
Slim

Postgis パッケージはEdge Alpineリポジトリでのみ使用でき、安定版では使用できません。そのため、「満たされない制約」エラーが発生します。

ただし、とにかくEdgeリポジトリから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
12
Nickolay