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

Postgresql 如何在Docker容器构建期间设置Postgres管理员密码,postgresql,docker,tomcat,docker-compose,centos,Postgresql,Docker,Tomcat,Docker Compose,Centos,我们有一个使用postgresql DB的web应用程序,正在CentOS7 env上部署到tomcat。我们正在使用docker(和docker compose),并在Azure可视化机器上运行 在docker/docker Compobase构建过程中,我们无法预先设置管理员用户“postgres”密码(例如mysecret) 我们尝试使用docker-compose.yml文件中的environments:设置,以及./portgres Dockerfile文件中的ENV。两者都不起作用

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

在docker/docker Compobase构建过程中,我们无法预先设置管理员用户“postgres”密码(例如mysecret)

我们尝试使用docker-compose.yml文件中的environments:设置,以及./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" 版本:“0.2” 服务: 应用程序网站: 构建:./tomcat 端口: - "80:80" 链接: -应用数据库 应用数据库: 建造:/博士后 环境: -“POSTGRES_PASSWORD=密码” -“PGPASSWORD=密码” 揭露: - "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"] 从centos开始:7 运行yum-y安装https://download.postgresql.org/pub/repos/yum/9.6/redhat/rhel-6-x86_64/pgdg-centos96-9.6-3.noarch.rpm 运行yum-y安装postgresql96 postgresql96服务器postgresql96 libs postgresql96 contrib postgresql96 devel 运行yum-y安装初始化脚本 用户发帖 ENV POSTGRES_PASSWORD=mysecret ENV PGPASSWORD=mysecret 运行/usr/pgsql-9.6/bin/initdb/var/lib/pgsql/9.6/data 运行echo“listen_addresses='*'”>/var/lib/pgsql/9.6/data/postgresql.conf 运行echo“PORT=5432”>>/var/lib/pgsql/9.6/data/postgresql.conf 运行echo“local all trust”>/var/lib/pgsql/9.6/data/pg_hba.conf 运行echo“host all 127.0.0.1/32 trust”>/var/lib/pgsql/9.6/data/pg_hba.conf 运行echo“host all::1/128 ident”>>/var/lib/pgsql/9.6/data/pg_hba.conf 运行echo“host all 0.0.0.0/0 md5”>/var/lib/pgsql/9.6/data/pg_hba.conf 曝光5432 入口点[“/usr/pgsql-9.6/bin/postgres”、“-D”、“/var/lib/pgsql/9.6/data”、“-p”、“5432”] Web应用部署失败,db身份验证错误,密码错误(密码“mysecret”在Web应用JPA persistence.xml中定义)。假设未正确设置密码(默认initdb未设置密码) 然后,使用上述docker exec命令手动更改密码,一切正常


希望在docker构建期间设置密码。基于Postgres/Docker文档和一些线程,无论是环境:来自Docker compose设置还是来自Docker文件的ENV都可以工作。这两种方法都不适用于我们。

谢谢,我以前读过这个链接,还尝试将PGPASSWORD添加到环境和环境中。我必须在Dockerfile中运行SQLALTER命令吗?我更喜欢PGPASSFILE。但是:这是你的选择。谢谢,我以前读过这个链接,也尝试过在环境和环境中添加PGPASSWORD。我必须在Dockerfile中运行SQLALTER命令吗?我更喜欢PGPASSFILE。但是:这是你的选择。