Note

dockerfiles needs your help reporting errors, bugs and usability feedback. If you encounter an error, please post on the Issue tracker.

Postgresql

Postgresql from source.

  • Postgresql from official git VCS.
  • Adjustable version by updating git checkout tag.
  • Support for python, tcl, perl.
  • Support for init.d service.
  • Pure Dockerfile, no external shell scripts.

This Dockerfile compiles postgres from git and sets up a service with the username and password docker and docker.

Currently it uses the release 9.3.1.

The version can be adjusted by modifying the git checkout REL9_3_1 in the Dockerfile.

Building and debugging

sudo docker build -t="postgresql" .
$   sudo docker run -i -t postgresql /bin/bash

# and when inside:
$   service postgresql start

Running

$   CONTAINER=$(sudo docker run -d -p 5432 \
    -t postgresql)

$   CONTAINER_IP=$(sudo docker inspect $CONTAINER | grep IPAddress | \
    awk '{ print $2 }' | tr -d ',"')

# on your local machine postgres' client
$   psql -p5432 -h $CONTAINER_IP --username='docker' --password --list

Dockerfile

FROM ubuntu
#FROM stackbrew/ubuntu:13.10
#MAINTAINER Tony Narlock <tony@git-pull.com>

EXPOSE 5432

RUN apt-get update -y
RUN apt-get upgrade -y
RUN apt-get install build-essential -y
RUN apt-get install libreadline-dev zlib1g-dev flex bison libxml2-dev \
    libfl-dev libxslt1-dev libssl-dev libfl-dev python2.7-dev python-dev \
    libpam-dev tcl-dev libperl-dev git -y
RUN git clone git://git.postgresql.org/git/postgresql.git
RUN cd postgresql && git checkout REL9_3_1
RUN cd postgresql && ./configure --with-tcl --with-perl --with-python \
    --with-pam --with-openssl --with-libxml --with-libxslt \
    --mandir=/usr/local/share/postgresql/man \
    --docdir=/usr/local/share/doc/postgresql-doc \
    --sysconfdir=/etc/postgresql-common \
    --datarootdir=/usr/local/share \
    --datadir=/usr/local/share/postgresql \
    --bindir=/usr/local/lib/postgresql/bin \
    --libdir=/usr/local/lib \
    --libexecdir=/usr/local/lib/postgresql \
    --includedir=/usr/local/include/postgresql \
    --with-pgport=5432 \
    --enable-integer-datetimes \
    --enable-thread-safety \
    --enable-debug \
    --disable-rpath \
    --with-system-tzdata=/usr/share/zoneinfo
RUN cd postgresql && make
RUN cd postgresql && make install
RUN cd postgresql/contrib make all
RUN cd postgresql/contrib make install
RUN cp postgresql/contrib/start-scripts/linux /etc/init.d/postgresql 
RUN sed -i 's,/usr/local/pgsql/data,/var/lib/postgresql/data,g' /etc/init.d/postgresql
RUN sed -i 's,/usr/local/pgsql,/usr/local/lib/postgresql,g' /etc/init.d/postgresql

RUN chmod +x /etc/init.d/postgresql
RUN update-rc.d postgresql defaults
RUN echo 'PATH=$PATH:/usr/local/lib/postgresql/bin; export PATH' > /etc/profile.d/postgresql.sh
RUN echo 'MANPATH=$MANPATH:/usr/local/postgresql/man; export MANPATH' >> /etc/profile.d/pgmanual.sh
RUN chmod 775 /etc/profile.d/postgresql.sh
RUN chmod 775 /etc/profile.d/pgmanual.sh
RUN . /etc/profile
RUN adduser postgres --disabled-password --gecos ""
RUN mkdir -p /var/log/postgresql
RUN chown -R postgres:postgres /var/log/postgresql

RUN mkdir -p /var/lib/postgresql/data
RUN chown -R postgres:postgres /var/lib/postgresql/data
RUN /sbin/ldconfig /usr/local/lib/postgresql
RUN su - postgres -c "/usr/local/lib/postgresql/bin/initdb \
    -D /var/lib/postgresql/data"
RUN echo "CREATE USER docker WITH SUPERUSER PASSWORD 'docker';" | \
    su postgres sh -c "/usr/local/lib/postgresql/bin/postgres --single \
    -D /var/lib/postgresql/data \
    -c config_file=/var/lib/postgresql/data/postgresql.conf"

RUN echo "host    all     all   0.0.0.0/0     trust" >> /var/lib/postgresql/data/pg_hba.conf
RUN echo "listen_addresses='*'" >> /var/lib/postgresql/data/postgresql.conf

CMD service postgresql start && tail -F /var/lib/postgresql/data/serverlog