title: How to set Postgres admin password during a Docker container build
body: <p>We have a web app using postgresql DB, being deployed to tomcat on CentOS7 env. We are using docker (and docker-compose), and running on an Azure visual machine.</p>
  
  <p>We cannot pre-set the admin user 'postgres' password (e.g. mysecret) during the docker/docker-compoase build process.</p>
  
  <p>We have tried to use the environments: setting from the docker-compose.yml file, also the ENV in the ./portgres Dockerfile file. Neither works.</p>
  
  <p>I had to manually use 'docker exec -it  /bin/bash' to run the psql command to set the password. We like to avoid the manual step.</p>
  
  <p>$ cat docker-compose.yml </p>
  
  <pre>
  version: '0.2'
  services: 
    app-web: 
       build: ./tomcat
       ports:
       -  "80:80"
       links:
       - app-db
  
    app-db:
      build: ./postgres
      environment:
        - "POSTGRES_PASSWORD=password"
        - "PGPASSWORD=password"
      expose:
        - "5432"
  </pre>
  
  <p>$ cat postgres/Dockerfile</p>
  
  <pre>
  FROM centos:7
  RUN yum -y install https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm
  RUN yum -y install postgresql96 postgresql96-server postgresql96-libs postgresql96-contrib postgresql96-devel
  
  RUN yum -y install initscripts
  USER postgres
  ENV POSTGRES_PASSWORD=mysecret
  ENV PGPASSWORD=mysecret
  RUN /usr/pgsql-9.6/bin/initdb /var/lib/pgsql/9.6/data
  
  RUN echo "listen_addresses = '*'" >> /var/lib/pgsql/9.6/data/postgresql.conf
  RUN echo "PORT = 5432" >> /var/lib/pgsql/9.6/data/postgresql.conf
  RUN echo "local   all             all                                     trust" > /var/lib/pgsql/9.6/data/pg_hba.conf
  RUN echo "host    all             all             127.0.0.1/32            trust" >> /var/lib/pgsql/9.6/data/pg_hba.conf
  RUN echo "host    all             all             ::1/128                 ident" >> /var/lib/pgsql/9.6/data/pg_hba.conf
  RUN echo "host    all             all         0.0.0.0/0            md5" >> /var/lib/pgsql/9.6/data/pg_hba.conf
  
  EXPOSE 5432
  ENTRYPOINT ["/usr/pgsql-9.6/bin/postgres","-D","/var/lib/pgsql/9.6/data","-p","5432"]
  
  </pre>
  
  <p>Web app deployment fails, db authentication error with wrong password (the password 'mysecret' is defined in the web app JPA persistence.xml). Assuming the password was not properly set (default initdb does not set the password)
  Then, manually change the password using the above mentioned docker exec command, everything works.</p>
  
  <p>Like to set the password during the docker build time. Based on Postgres/Docker documentation and some threads, either environments: from docker-compose setting or ENV from the docker file would work. Neither works for us.</p>