我们有一个使用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。都不适合我们。