Итак всем большое спасибо за то что помогли разобраться. Решение для потомства:
Опишу все с путями.
1) Создаем папки
mkdir /opt/docker_postgres
mkdir /opt/docker_postgres/postgres_data
2) Переходим в нее и создаем файлы
cd /opt/docker_postgres
touch init-database.sh
touch docker-compose.yml
3) Редактируем docker-compose.yml
nano docker-compose.yml
version: "3.9"
services:
postgres:
image: postgres:latest
restart: always
container_name: postgres
environment:
POSTGRES_PASSWORD: "123pwd"
MAX_CONNECTION: 200
PGDATA: "/var/lib/postgresql/data/pgdata"
ports:
- "5432:5432"
volumes:
- type: bind
source: /opt/docker_postgres/postgres_data
target: /var/lib/postgresql/data/
volumes:
- ./init-database.sh:/docker-entrypoint-initdb.d/init-database.sh
4) Редактируем init-database.sh
#!/bin/bash
set -e
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" --dbname "$POSTGRES_DB" <<-EOSQL
CREATE USER user WITH PASSWORD 'userpwd';
CREATE DATABASE userdb;
GRANT ALL PRIVILEGES ON DATABASE userdb TO user;
EOSQL
5) И запускаем docker-compose up -d всё это время вы находитесь в директории в которой у вас лежит .yml d в примере это /opt/docker_postgres
PS. в файле init-database.sh добавляем нужное кол-во баз и пользователей для этих баз.
PSS /docker-entrypoint-initdb.d находится внутри контейнера и наша задача пробросить скрипт в нее (или sql запрос)