如何为postgis创建docker镜像,以便在构建时或容器完全运行之前启用扩展?

时间:2015-07-14 13:34:16

标签: postgresql docker sh

我的意思是我想为postgis创建一个docker镜像,在构建之后就可以完全使用了。因此,如果用户运行

docker run -e POSTGRES_USER=user somepostgis

将创建用户数据库,并且已安装扩展

官方postgres图像不能用于该AFAIK。

基本上需要编写脚本并告诉它是入口点。此脚本应创建数据库并使用在不同端口上运行的porstgres服务器创建扩展,然后在端口5432上重新启动它。

但我不知道足够的和停泊者这样做。现在它说没有pg_ctl命令

如果您想帮助您fork

    FROM ubuntu:15.04

#ENV RELEASE_NAME lsb_release -sc
#RUN apt-get update && apt-get install wget
#RUN echo "deb http://apt.postgresql.org/pub/repos/apt ${RELEASE_NAME}-pgdg main" >> /etc/apt/sources.list
#RUN cat /etc/apt/sources.list
#RUN wget --quiet -O - http://apt.postgresql.org/pub/repos/apt/ACCC4CF8.asc | sudo apt-key add -

RUN apt-get update \
    && apt-get install -y --no-install-recommends \
           postgresql-9.4-postgis-2.1 \
       curl \
    && curl -o /usr/local/bin/gosu -SL "https://github.com/tianon/gosu/releases/download/1.2/gosu-$(dpkg --print-architecture)" \
    && curl -o /usr/local/bin/gosu.asc -SL "https://github.com/tianon/gosu/releases/download/1.2/gosu-$(dpkg --print-architecture).asc" \
    && gpg --verify /usr/local/bin/gosu.asc \
    && rm /usr/local/bin/gosu.asc \
    && chmod +x /usr/local/bin/gosu \
    && apt-get purge -y --auto-remove curl

RUN mkdir /docker-entrypoint-initdb.d

COPY docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]
RUN chmod +x /docker-entrypoint.sh
RUN ls -l /docker-entrypoint.sh

EXPOSE 5432
CMD ["postgres"]

所以我试图做那样的事情,但它不起作用。

#!/bin/bash

${POSTGRES_DB:=$POSTGRES_USER}

gosu postgres pg_ctl start -w -D ${PGDATA} -0 "-p 5433"
gosu postgres createuser ${POSTGRES_USER}
gosu postgres createdb ${POSTGRES_DB} -s -E UTF8
gosu postgres psql -d ${POSTGRES_DB} -c "create extension if not exists postgis;"
gosu postgres psql -d ${POSTGRES_DB} -c "create extension if not exists postgis_topology;"

pg_ctl -w  restart

0 个答案:

没有答案