From a6b40a068cd970246fb1b759ae76ecea39ffddc0 Mon Sep 17 00:00:00 2001 From: Jignesh Shah Date: Fri, 13 May 2016 12:33:49 -0400 Subject: [PATCH] Update to add PostgreSQL 9.6 beta1. Also update older versions --- .travis.yml | 1 + 9.1/Dockerfile | 2 +- 9.2/Dockerfile | 2 +- 9.3/Dockerfile | 2 +- 9.4/Dockerfile | 2 +- 9.5/Dockerfile | 2 +- 9.6/Dockerfile | 59 ++++++++++++++++++++++++ 9.6/docker-entrypoint.sh | 99 ++++++++++++++++++++++++++++++++++++++++ 8 files changed, 164 insertions(+), 5 deletions(-) create mode 100644 9.6/Dockerfile create mode 100755 9.6/docker-entrypoint.sh diff --git a/.travis.yml b/.travis.yml index d4d7c4759e..0d8050ad3a 100644 --- a/.travis.yml +++ b/.travis.yml @@ -2,6 +2,7 @@ language: bash services: docker env: + - VERSION=9.6 - VERSION=9.5 - VERSION=9.4 - VERSION=9.3 diff --git a/9.1/Dockerfile b/9.1/Dockerfile index 3e1b574848..2e37c310fc 100644 --- a/9.1/Dockerfile +++ b/9.1/Dockerfile @@ -28,7 +28,7 @@ RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.1 -ENV PG_VERSION 9.1.21-1.pgdg80+1 +ENV PG_VERSION 9.1.22-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list diff --git a/9.2/Dockerfile b/9.2/Dockerfile index b5db6693b8..0fb6f71a3f 100644 --- a/9.2/Dockerfile +++ b/9.2/Dockerfile @@ -28,7 +28,7 @@ RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.2 -ENV PG_VERSION 9.2.16-1.pgdg80+1 +ENV PG_VERSION 9.2.17-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list diff --git a/9.3/Dockerfile b/9.3/Dockerfile index 3409270365..36d9e0f91b 100644 --- a/9.3/Dockerfile +++ b/9.3/Dockerfile @@ -28,7 +28,7 @@ RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.3 -ENV PG_VERSION 9.3.12-1.pgdg80+1 +ENV PG_VERSION 9.3.13-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list diff --git a/9.4/Dockerfile b/9.4/Dockerfile index d6bf300914..21e7852638 100644 --- a/9.4/Dockerfile +++ b/9.4/Dockerfile @@ -28,7 +28,7 @@ RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.4 -ENV PG_VERSION 9.4.7-1.pgdg80+1 +ENV PG_VERSION 9.4.8-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list diff --git a/9.5/Dockerfile b/9.5/Dockerfile index 33f40001b5..095a9fa88d 100644 --- a/9.5/Dockerfile +++ b/9.5/Dockerfile @@ -28,7 +28,7 @@ RUN mkdir /docker-entrypoint-initdb.d RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 ENV PG_MAJOR 9.5 -ENV PG_VERSION 9.5.2-1.pgdg80+1 +ENV PG_VERSION 9.5.3-1.pgdg80+1 RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list diff --git a/9.6/Dockerfile b/9.6/Dockerfile new file mode 100644 index 0000000000..2e7470419e --- /dev/null +++ b/9.6/Dockerfile @@ -0,0 +1,59 @@ +# vim:set ft=dockerfile: +FROM debian:jessie + +# explicitly set user/group IDs +RUN groupadd -r postgres --gid=999 && useradd -r -g postgres --uid=999 postgres + +# grab gosu for easy step-down from root +ENV GOSU_VERSION 1.7 +RUN set -x \ + && apt-get update && apt-get install -y --no-install-recommends ca-certificates wget && rm -rf /var/lib/apt/lists/* \ + && wget -O /usr/local/bin/gosu "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture)" \ + && wget -O /usr/local/bin/gosu.asc "https://github.com/tianon/gosu/releases/download/$GOSU_VERSION/gosu-$(dpkg --print-architecture).asc" \ + && export GNUPGHOME="$(mktemp -d)" \ + && gpg --keyserver ha.pool.sks-keyservers.net --recv-keys B42F6819007F00F88E364FD4036A9C25BF357DD4 \ + && gpg --batch --verify /usr/local/bin/gosu.asc /usr/local/bin/gosu \ + && rm -r "$GNUPGHOME" /usr/local/bin/gosu.asc \ + && chmod +x /usr/local/bin/gosu \ + && gosu nobody true \ + && apt-get purge -y --auto-remove ca-certificates wget + +# make the "en_US.UTF-8" locale so postgres will be utf-8 enabled by default +RUN apt-get update && apt-get install -y locales && rm -rf /var/lib/apt/lists/* \ + && localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 +ENV LANG en_US.utf8 + +RUN mkdir /docker-entrypoint-initdb.d + +RUN apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys B97B0AFCAA1A47F044F244A07FCC7D46ACCC4CF8 + +ENV PG_MAJOR 9.6 +ENV PG_VERSION 9.6~beta1-1.pgdg80+1 + +RUN echo 'deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main' $PG_MAJOR > /etc/apt/sources.list.d/pgdg.list + +RUN apt-get update \ + && apt-get install -y postgresql-common \ + && sed -ri 's/#(create_main_cluster) .*$/\1 = false/' /etc/postgresql-common/createcluster.conf \ + && apt-get install -y \ + postgresql-$PG_MAJOR=$PG_VERSION \ + postgresql-contrib-$PG_MAJOR=$PG_VERSION \ + && rm -rf /var/lib/apt/lists/* + +# make the sample config easier to munge (and "correct by default") +RUN mv -v /usr/share/postgresql/$PG_MAJOR/postgresql.conf.sample /usr/share/postgresql/ \ + && ln -sv ../postgresql.conf.sample /usr/share/postgresql/$PG_MAJOR/ \ + && sed -ri "s!^#?(listen_addresses)\s*=\s*\S+.*!\1 = '*'!" /usr/share/postgresql/postgresql.conf.sample + +RUN mkdir -p /var/run/postgresql && chown -R postgres /var/run/postgresql + +ENV PATH /usr/lib/postgresql/$PG_MAJOR/bin:$PATH +ENV PGDATA /var/lib/postgresql/data +VOLUME /var/lib/postgresql/data + +COPY docker-entrypoint.sh / + +ENTRYPOINT ["/docker-entrypoint.sh"] + +EXPOSE 5432 +CMD ["postgres"] diff --git a/9.6/docker-entrypoint.sh b/9.6/docker-entrypoint.sh new file mode 100755 index 0000000000..3b436e4adf --- /dev/null +++ b/9.6/docker-entrypoint.sh @@ -0,0 +1,99 @@ +#!/bin/bash +set -e + +if [ "${1:0:1}" = '-' ]; then + set -- postgres "$@" +fi + +if [ "$1" = 'postgres' ]; then + mkdir -p "$PGDATA" + chmod 700 "$PGDATA" + chown -R postgres "$PGDATA" + + chmod g+s /run/postgresql + chown -R postgres /run/postgresql + + # look specifically for PG_VERSION, as it is expected in the DB dir + if [ ! -s "$PGDATA/PG_VERSION" ]; then + eval "gosu postgres initdb $POSTGRES_INITDB_ARGS" + + # check password first so we can output the warning before postgres + # messes it up + if [ "$POSTGRES_PASSWORD" ]; then + pass="PASSWORD '$POSTGRES_PASSWORD'" + authMethod=md5 + else + # The - option suppresses leading tabs but *not* spaces. :) + cat >&2 <<-'EOWARN' + **************************************************** + WARNING: No password has been set for the database. + This will allow anyone with access to the + Postgres port to access your database. In + Docker's default configuration, this is + effectively any other container on the same + system. + + Use "-e POSTGRES_PASSWORD=password" to set + it in "docker run". + **************************************************** + EOWARN + + pass= + authMethod=trust + fi + + { echo; echo "host all all 0.0.0.0/0 $authMethod"; } >> "$PGDATA/pg_hba.conf" + + # internal start of server in order to allow set-up using psql-client + # does not listen on external TCP/IP and waits until start finishes + gosu postgres pg_ctl -D "$PGDATA" \ + -o "-c listen_addresses='localhost'" \ + -w start + + : ${POSTGRES_USER:=postgres} + : ${POSTGRES_DB:=$POSTGRES_USER} + export POSTGRES_USER POSTGRES_DB + + psql=( psql -v ON_ERROR_STOP=1 ) + + if [ "$POSTGRES_DB" != 'postgres' ]; then + "${psql[@]}" --username postgres <<-EOSQL + CREATE DATABASE "$POSTGRES_DB" ; + EOSQL + echo + fi + + if [ "$POSTGRES_USER" = 'postgres' ]; then + op='ALTER' + else + op='CREATE' + fi + "${psql[@]}" --username postgres <<-EOSQL + $op USER "$POSTGRES_USER" WITH SUPERUSER $pass ; + EOSQL + echo + + psql+=( --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" ) + + echo + for f in /docker-entrypoint-initdb.d/*; do + case "$f" in + *.sh) echo "$0: running $f"; . "$f" ;; + *.sql) echo "$0: running $f"; "${psql[@]}" < "$f"; echo ;; + *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${psql[@]}"; echo ;; + *) echo "$0: ignoring $f" ;; + esac + echo + done + + gosu postgres pg_ctl -D "$PGDATA" -m fast -w stop + + echo + echo 'PostgreSQL init process complete; ready for start up.' + echo + fi + + exec gosu postgres "$@" +fi + +exec "$@"