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

我的意思是我想创build一个postgis的docker镜像,在build之后就可以完全使用。 所以,如果用户运行

docker run -e POSTGRES_USER=user somepostgis 

用户数据库将被创build和扩展已经安装

官方postgres图像不能用于AFAIK。

基本上需要写脚本,并告诉它将是入口点。 这个脚本应该创build数据库,并在不同端口上运行porstgres服务器来创build扩展,然后在端口5432上重新启动它。

但是我不知道,docker工人也这么做。 现在是说没有pg_ctl命令

如果你想帮助你可以分叉

  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