Я вполне нашел вариант 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
. Вы думаете об обходном пути?