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