ошибка docker-compose postgresql custom init script

#bash #postgresql #docker #docker-compose

#bash #postgresql #docker #docker-compose

Вопрос:

Журнал контейнера с ошибкой:

 /usr/local/bin/docker-entrypoint.sh: sourcing /docker-entrypoint-initdb.d/mulitple-databases.sh
postgresdb                  | Multiple database creation requested: users,products
postgresdb                  | Creating database 'users' for 'user'
postgresdb                  | 2020-11-26 19:53:50.336 UTC [75] FATAL:  database "user" does not exist
postgresdb                  | psql: error: could not connect to server: FATAL:  database "user" does not exist
 

Скрипт:

 #!/bin/bash

set -e
set -u

function create_database() {
    local database=$1
    local user=$2
    echo "Creating database '$database' for '$user'"
    psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
        CREATE DATABASE $database;
        GRANT ALL PRIVILEGES ON DATABASE $database TO $user;
EOSQL
}

if [ -n "$POSTGRES_MULTIPLE_DATABASES" ]; then
    echo "Multiple database creation requested: $POSTGRES_MULTIPLE_DATABASES"
    for db in $(echo $POSTGRES_MULTIPLE_DATABASES | tr ',' ' '); do
        create_database $db $POSTGRES_USER
    done
    echo "Multiple databases created"
fi
 

docker-compose file:

 postgresdb:
   image: postgres:13.0
   container_name: postgresdb
   env_file: .env
   environment:
     PG_DATA: /var/lib/postgresql/data
   volumes:
       - ./pgdata:/var/lib/postgresql/data
       - ./mulitple-databases.sh:/docker-entrypoint-initdb.d/mulitple-databases.sh
   ports:
       - 5432:5432
 

Может быть, кто-нибудь знает, как решить эту проблему.
Насколько я знаю, стандартная инициализация выполняется перед пользовательским скриптом, поэтому, когда скрипт запущен, пользователь уже существует.

Получил скрипт из этого репозитория. Даже с postgres: 9.6.2 не работает

Ответ №1:

Это будет звучать как шутка, но все же есть 2 проблемы:

  1. Вы получите сообщение об ошибке, если ваш POSTGRES_USER=user . Не знаю почему, но переход на что-то другое решает проблему.
  2. Также вы получите сообщение об ошибке с установленным POSTGRES_DB

Надеюсь, кто-нибудь может сказать мне, в чем проблема, в комментариях. Спасибо.