Как установить пароль администратора Postgres во время сборки контейнера Docker - PullRequest
0 голосов
/ 16 июня 2019

У нас есть веб-приложение, использующее базу данных postgresql, которое развертывается в Tomcat в CentOS7 env. Мы используем docker (и docker-compose) и работаем на визуальном компьютере Azure.

Мы не можем предварительно установить пароль администратора postgres (например, mysecret) во время процесса сборки docker / docker-compoase.

Мы попытались использовать окружение: настройки из файла docker-compose.yml, а также ENV в файле ./portgres Dockerfile. Ни то, ни другое не работает.

Мне пришлось вручную использовать '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"]

Сбой при развертывании веб-приложения, ошибка аутентификации БД с неверным паролем (пароль «mysecret» определен в веб-приложении JPA persistence.xml). Предполагая, что пароль был установлен неправильно (по умолчанию initdb не устанавливает пароль) Затем вручную измените пароль с помощью вышеупомянутой команды docker exec, все работает.

Как установить пароль во время сборки докера. Основываясь на документации Postgres / Docker и некоторых потоках, подойдет любая среда: из настроек docker-compose или ENV из файла docker. Ни один из нас не работает.

...