Выполнить сценарии в docker -entrypoint-initdb.d на --force-воссоздать - PullRequest
0 голосов
/ 22 января 2020

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

...