Я хотел бы создать несколько баз данных при запуске контейнера.Я использую postgres:11.2
в качестве базового изображения.
После прочтения документа здесь https://hub.docker.com/_/postgres и этого поста Как создать пользователя / базу данных в сценарии для Docker Postgres , я до сих порневозможно создать несколько баз данных при запуске контейнера.
Я пробовал следующие решения:
1-й с init.sh
:
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER owner;
CREATE DATABASE productservice;
GRANT ALL PRIVILEGES ON DATABASE productservice TO owner;
CREATE DATABASE usersservice;
GRANT ALL PRIVILEGES ON DATABASE usersservice TO owner;
CREATE DATABASE financeservice;
GRANT ALL PRIVILEGES ON DATABASE financeservice TO owner;
CREATE DATABASE relationshipservice;
GRANT ALL PRIVILEGES ON DATABASE relationshipservice TO owner;
CREATE DATABASE securityservice;
GRANT ALL PRIVILEGES ON DATABASE securityservice TO owner;
EOSQL
И в Dockerfile
ENV INIT_DIR /docker-entrypoint-initdb.d
RUN mkdir -p ${INIT_DIR}
COPY init.sh ${INIT_DIR}
Я не получаю никаких ошибок, но не создаются ни базы данных, ни пользователь, только база данных по умолчанию postgres
.
2nd с init.sql
CREATE USER owner;
CREATE DATABASE productservice;
GRANT ALL PRIVILEGES ON DATABASE productservice TO owner;
CREATE DATABASE chicoweursservice;
GRANT ALL PRIVILEGES ON DATABASE usersservice TO owner;
CREATE DATABASE financeservice;
GRANT ALL PRIVILEGES ON DATABASE financeservice TO owner;
CREATE DATABASE relationshipservice;
GRANT ALL PRIVILEGES ON DATABASE relationshipservice TO owner;
CREATE DATABASE securityservice;
GRANT ALL PRIVILEGES ON DATABASE securityservice TO owner;
И изменил Dockerfile
на
ENV INIT_DIR /docker-entrypoint-initdb.d
RUN mkdir -p ${INIT_DIR}
COPY init.sql ${INIT_DIR}
Результат такой же, как в первом случае.
Спасибо за вашу помощь.
РЕДАКТИРОВАТЬ:
Полный Dockerfile
FROM postgres:11.2
ENV PGDATA /var/lib/postgresql/data/pgdata
ENV INIT_DIR /docker-entrypoint-initdb.d
RUN mkdir -p ${INIT_DIR}
COPY init.sql ${INIT_DIR}
RUN localedef -i fr_FR -c -f UTF-8 -A /usr/share/locale/locale.alias fr_FR.UTF-8
ENV LANG en_US.UTF-8
VOLUME ${PGDATA}