У нас есть веб-приложение, использующее базу данных 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. Ни один из нас не работает.