«root» выполнение сервера PostgreSQL не разрешено.
Запрещается запускать контейнер БД с пользователем root
. Лучше запустить postgres
user.
. Один из способов - указать пользователя в docker-compose.
postgres:
image: postgres
container_name: postgres
user: postgres
ports:
- "5432:5432"
command: 'postgres'
Но при
command: bash -c "
postgres &&
createuser -l \"auser\"
"
во время созданияПользовательская команда, может случиться так, что БД не готова принять соединение.
Таким образом, у вас есть два лучших варианта.
- Использование переменных среды
POSTGRES_USER
Эта необязательная переменная среды используется вместе с POSTGRES_PASSWORD
для установки пользователя и его пароля. Эта переменная создаст указанного пользователя с полномочиями суперпользователя и базу данных с тем же именем. Если она не указана, будет использоваться пользователь по умолчанию postgres .
postgres:
image: postgres
container_name: postgres
environment:
POSTGRES_USER: test
POSTGRES_PASSWORD: password
POSTGRES_DB: myapp
user: postgres
ports:
- "5432:5432"
Второй параметр
Сценарии инициализации
Если вы хотите выполнить дополнительную инициализацию изображения, полученного из этого,добавьте один или несколько *.sql, *.sql.gz, or *.sh scripts
в /docker-entrypoint-initdb.d
(создавая каталог при необходимости). После того, как точка входа вызовет initdb для создания пользователя и базы данных postgres по умолчанию, она запустит любые *.sql files
, запустит любые исполняемые *.sh
сценарии и найдет все неисполняемые *.sh
сценарии, найденные в этом каталоге, для дальнейшей инициализации перед запуском. услуга.
Например, чтобы добавить дополнительного пользователя и базу данных , добавьте следующее к /docker-entrypoint-initdb.d/init-user-db.sh
:
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER docker;
CREATE DATABASE docker;
GRANT ALL PRIVILEGES ON DATABASE docker TO docker;
EOSQL