如何在Docker容器构建期间设置Postgres管理员密码

时间:2019-06-16 15:07:25

标签: postgresql docker tomcat docker-compose centos

我们有一个使用postgresql DB的Web应用程序,该应用程序已部署到CentOS7 env上的tomcat。我们正在使用docker(和docker-compose),并在Azure可视机器上运行。

我们无法在docker / docker-compoase构建过程中预先设置管理员用户的'postgres'密码(例如mysecret)。

我们尝试使用以下环境:在docker-compose.yml文件中进行设置,还在./portgres Dockerfile文件中进行ENV设置。都不行。

我必须手动使用'docker exec -it / bin / bash'运行psql命令来设置密码。我们希望避免手动操作。

$ cat docker-compose.yml

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"

$ cat postgres / Dockerfile

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"]

Web应用程序部署失败,数据库身份验证错误,密码错误(Web应用程序JPA persistence.xml中定义了密码“ mysecret”)。假设未正确设置密码(默认的initdb未设置密码) 然后,使用上述docker exec命令手动更改密码,一切正常。

就像在Docker构建期间设置密码一样。根据Postgres / Docker文档和一些线程,以下两种环境都可以使用:来自docker-compose设置或来自docker文件的ENV。都不适合我们。

0 个答案:

没有答案