У меня есть следующая конфигурация в файле docker -compose
postgresql:
image: "postgres:11-alpine"
volumes:
- type: bind
source: ./postgresql
target: /var/lib/postgresql/data
environment:
POSTGRES_USER: 'testing'
POSTGRES_PASSWORD: 'testing'
POSTGRES_DB: 'testing'
PGDATA: '/var/lib/postgresql/data/pgdata'
Когда я запускаю docker -compose, я обнаружил, что есть роль с именем testing
и база данных с именем testing
В базе данных testing
есть schema
с именем public
.
Я вижу, что owner
из public
это testing
Как Это возможно. Обычно, когда мы создаем новую базу данных, копируется template1
. Таким образом, владельцем схемы public
должен быть postgres
Если он установлен Dockerfile, то как это делается. Я хочу знать, какая команда это делает.
Я проверил docker-entrypoint.sh
https://github.com/docker-library/postgres/blob/33bccfcaddd0679f55ee1028c012d26cd196537d/11/alpine/docker-entrypoint.sh
Я нашел одну команду, используемую для создания пользователя. команда:
eval 'initdb --username="$POSTGRES_USER" --pwfile=<(echo "$POSTGRES_PASSWORD") '"$POSTGRES_INITDB_ARGS"' "$@"'
Как мы можем использовать initdb
для создания пользователя. Обычно мы CREATE ROLE
sql или createuser
команда
Если возможно, как именно это достигается, когда владелец public
изменился на testing
ТАКЖЕ я нашел схему public
владелец для имени базы данных postgres
также testing
.