好的,因此任务似乎很简单!使用Alpine图像(因为它重量轻且安全)来执行一些PostgreSQL数据库创建/迁移。我使用的是以下Dockerfile使用的代码在这里:
Alpine
PostgreSQL
Dockerfile
FROM alpine:latest RUN apk add -U postgresql # install PostGIS ENV POSTGIS_VERSION 2.5.2 ENV POSTGIS_SHA256 225aeaece00a1a6a9af15526af81bef2af27f4c198de820af1367a792ee1d1a9 RUN set -ex \ \ && apk add --no-cache --virtual .fetch-deps \ ca-certificates \ openssl \ tar \ \ && wget -O postgis.tar.gz "https://github.com/postgis/postgis/archive/$POSTGIS_VERSION.tar.gz" \ && echo "$POSTGIS_SHA256 *postgis.tar.gz" | sha256sum -c - \ && mkdir -p /usr/src/postgis \ && tar \ --extract \ --file postgis.tar.gz \ --directory /usr/src/postgis \ --strip-components 1 \ && rm postgis.tar.gz \ \ && apk add --no-cache --virtual .build-deps \ autoconf \ automake \ g++ \ json-c-dev \ libtool \ libxml2-dev \ make \ perl \ \ && apk add --no-cache --virtual .build-deps-edge \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \ gdal-dev \ geos-dev \ proj4-dev \ protobuf-c-dev \ && cd /usr/src/postgis \ && ./autogen.sh \ # configure options taken from: # https://anonscm.debian.org/cgit/pkg-grass/postgis.git/tree/debian/rules?h=jessie && ./configure \ # --with-gui \ && make \ && make install \ && apk add --no-cache --virtual .postgis-rundeps \ json-c \ && apk add --no-cache --virtual .postgis-rundeps-edge \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \ geos \ gdal \ proj4 \ protobuf-c \ && cd / \ && rm -rf /usr/src/postgis \ && apk del .fetch-deps .build-deps .build-deps-edge COPY ./db-creator.sh /db-creator.sh CMD ["./db-creator.sh"]
但是,apk由于某些unsatisfiable constraints错误,未使用安装依赖项。错误如下,我打开的这个问题中提供了完整的日志。
apk
unsatisfiable constraints
ERROR: unsatisfiable constraints: gdal-dev (missing): required by: .build-deps-edge-20200123.143501[gdal-dev] geos-dev (missing): required by: .build-deps-edge-20200123.143501[geos-dev] proj4-dev (missing): required by: .build-deps-edge-20200123.143501[proj4-dev]
任何帮助表示赞赏。
github上的代码包含另一个图像postgres:11-alpine与问题中定义的图像进行比较alpine:latest。
alpine:latest
软件包gdal- dev,geos- dev,protobuf-c- dev不再位于边缘仓库测试分支中,它们已迁移到稳定的v3.11存储库中。还被proj4-dev重命名为proj- dev,它也位于稳定的v3.11存储库中。
proj4-dev
因此,要解决此问题,Dockerfile我们只需要从v3.11 repo安装上述软件包,即更改这部分代码:
&& apk add --no-cache --virtual .build-deps \ autoconf \ automake \ g++ \ json-c-dev \ libtool \ libxml2-dev \ make \ perl \ \ && apk add --no-cache --virtual .build-deps-edge \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \ gdal-dev \ geos-dev \ proj4-dev \ protobuf-c-dev \ proj4-dev \ protobuf-c-dev \
对此:
&& apk add --no-cache --virtual .build-deps \ autoconf \ automake \ g++ \ gdal-dev \ geos-dev \ json-c-dev \ libtool \ libxml2-dev \ make \ perl \ proj-dev \ protobuf-c-dev \ \
最终Dockerfile是:
FROM alpine:3.11 RUN apk add -U postgresql # install PostGIS ENV POSTGIS_VERSION 2.5.2 ENV POSTGIS_SHA256 225aeaece00a1a6a9af15526af81bef2af27f4c198de820af1367a792ee1d1a9 RUN set -ex \ \ && apk add --no-cache --virtual .fetch-deps \ ca-certificates \ openssl \ tar \ \ && wget -O postgis.tar.gz "https://github.com/postgis/postgis/archive/$POSTGIS_VERSION.tar.gz" \ && echo "$POSTGIS_SHA256 *postgis.tar.gz" | sha256sum -c - \ && mkdir -p /usr/src/postgis \ && tar \ --extract \ --file postgis.tar.gz \ --directory /usr/src/postgis \ --strip-components 1 \ && rm postgis.tar.gz \ \ && apk add --no-cache --virtual .build-deps \ autoconf \ automake \ g++ \ gdal-dev \ geos-dev \ json-c-dev \ libtool \ libxml2-dev \ make \ perl \ proj-dev \ protobuf-c-dev \ \ && cd /usr/src/postgis \ && ./autogen.sh \ # configure options taken from: # https://anonscm.debian.org/cgit/pkg-grass/postgis.git/tree/debian/rules?h=jessie && ./configure \ # --with-gui \ && make \ && make install \ && apk add --no-cache --virtual .postgis-rundeps \ json-c \ && apk add --no-cache --virtual .postgis-rundeps-edge \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \ --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \ geos \ gdal \ proj4 \ protobuf-c \ && cd / \ && rm -rf /usr/src/postgis \ && apk del .fetch-deps .build-deps .build-deps-edge COPY ./db-creator.sh /db-creator.sh CMD ["./db-creator.sh"]