From d49499cd7c022ff3a7cfddbd385e5da32ab2aec2 Mon Sep 17 00:00:00 2001 From: Renzo Kottmann Date: Tue, 4 Aug 2015 17:17:39 +0200 Subject: [PATCH] more sane way of starting and stopping postgres server using pg_ctl as recommended per postgresql docs --- docker-entrypoint.sh | 30 ++++++++---------------------- 1 file changed, 8 insertions(+), 22 deletions(-) diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh index 42a383de78..c1ab886a67 100755 --- a/docker-entrypoint.sh +++ b/docker-entrypoint.sh @@ -7,8 +7,8 @@ set_listen_addresses() { } if [ "$1" = 'postgres' ]; then - mkdir -p "$PGDATA" - chown -R postgres "$PGDATA" + mkdir -p "${PGDATA}" + chown -R postgres "${PGDATA}" chmod g+s /run/postgresql chown -R postgres /run/postgresql @@ -44,21 +44,11 @@ if [ "$1" = 'postgres' ]; then { echo; echo "host all all 0.0.0.0/0 $authMethod"; } >> "$PGDATA/pg_hba.conf" - set_listen_addresses '' # we're going to start up postgres, but it's not ready for use yet (this is initialization), so don't listen to the outside world yet - - gosu postgres "$@" & - pid="$!" - for i in {30..0}; do - if echo 'SELECT 1' | psql --username postgres &> /dev/null; then - break - fi - echo 'PostgreSQL init process in progress...' - sleep 1 - done - if [ "$i" = 0 ]; then - echo >&2 'PostgreSQL init process failed' - exit 1 - fi + # internal start of server in order to allow set-up using psql-client + gosu postgres pg_ctl -D ${PGDATA} \ + -o "-c listen_addresses=''" \ + -w start # does not listen on TCP/IP and wait + # until start finished : ${POSTGRES_USER:=postgres} : ${POSTGRES_DB:=$POSTGRES_USER} @@ -91,11 +81,7 @@ if [ "$1" = 'postgres' ]; then echo done - if ! kill -s TERM "$pid" || ! wait "$pid"; then - echo >&2 'PostgreSQL init process failed' - exit 1 - fi - + gosu postgres pg_ctl -D ${PGDATA} -m fast -w stop set_listen_addresses '*' echo