Выполнять скрипты в docker-entrypoint-initdb.d на --force-reconate
Я очень хорошо разбираюсь в docker-compose --force-recreate
вариант. В конвейере CI/CD одного из моих проектов у меня есть следующая инструкция
docker-compose up -d --force-recreate
которые позволяют мне настраивать мою инфраструктуру, объединять после слияния. Я создал сценарий для анализа следующей переменной ENV VAR для создания БД:POSTGRES_DBS=some_user->${PASSWORD_1}|an_other_user->${PASSWORD_2}
if [ -n "$POSTGRES_DBS" ]; then
IFS=\|
for s in $POSTGRES_DBS ; do
pass=$(echo "$s" | sed 's/.*->//');
user=$(echo "$s" | sed 's/->.*//');
db=$user"_db";
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE USER $user WITH PASSWORD '$pass';
CREATE DATABASE $db;
REVOKE CONNECT ON DATABASE $db FROM PUBLIC;
GRANT ALL PRIVILEGES ON DATABASE $db TO $user;
EOSQL
done
fi
Работает как шарм, но когда я пытался --force-recreate
с POSTGRES_DBS=some_user->${PASSWORD_1}|an_other_user->${PASSWORD_1}|test->test
, это не создало test
пользователь или test_db
. У меня есть чувство, что скрипты вdocker-entrypoint-initdb.d
(postgres:12.1-alpine) запускаются только при первом создании экземпляра контейнера и не запускаются--force-recreate
. Вы думаете об обходном пути?