在--force-recreate上在docker-entrypoint-initdb.d中执行脚本

时间:2020-01-22 19:23:17

标签: postgresql docker docker-compose sh postgresql-initdb

我非常了解 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触发。您认为有解决方法吗?

0 个答案:

没有答案