#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 проблемы:
- Вы получите сообщение об ошибке, если ваш
POSTGRES_USER=user
. Не знаю почему, но переход на что-то другое решает проблему. - Также вы получите сообщение об ошибке с установленным
POSTGRES_DB
Надеюсь, кто-нибудь может сказать мне, в чем проблема, в комментариях. Спасибо.