Как использовать Docker compose для создания нескольких баз данных и соответствующих пользователей?

Как изменить YAML-конфигурацию для создания нескольких баз данных и пользователей в Docker для PostgreSQL? Как организовать пароли для каждой базы данных и пользователя? Как будет работать база данных по умолчанию без пароля? Пожалуйста, предоставьте пример YAML-конфигурации для данных требований:

version: "3.9"
services:
  postgres:
    image: postgres:13.3
    environment:
      POSTGRES_DB: "habrdb"
      POSTGRES_USER: "habrpguser"
      POSTGRES_PASSWORD: "pgpwd4habr"
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"

# Допишите здесь необходимые изменения и добавления для создания трех баз данных и пользователей соответственно
  • 31 октября 2023 г. 11:20
Ответы на вопрос 2
Для создания нескольких баз данных и соответствующих пользователей в Docker для PostgreSQL вам нужно добавить несколько блоков `environment` с различными переменными окружения для каждой базы данных и пользователя.

Пример YAML-конфигурации для создания трех баз данных (`db1`, `db2`, `db3`) и пользователей (`user1`, `user2`, `user3`) соответственно, а также организации паролей для каждой базы данных и пользователя:

```yaml
version: "3.9"
services:
  postgres:
    image: postgres:13.3
    environment:
      - POSTGRES_DB=db1
      - POSTGRES_USER=user1
      - POSTGRES_PASSWORD=password1
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5432:5432"
      
  postgres2:
    image: postgres:13.3
    environment:
      - POSTGRES_DB=db2
      - POSTGRES_USER=user2
      - POSTGRES_PASSWORD=password2
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5433:5432"
      
  postgres3:
    image: postgres:13.3
    environment:
      - POSTGRES_DB=db3
      - POSTGRES_USER=user3
      - POSTGRES_PASSWORD=password3
    volumes:
      - .:/docker-entrypoint-initdb.d
    ports:
      - "5434:5432"
```

В этом примере создаются три сервиса, каждый из которых представляет отдельную базу данных. Каждая переменная окружения `POSTGRES_DB` определяет имя базы данных, а переменные окружения `POSTGRES_USER` и `POSTGRES_PASSWORD` определяют имя пользователя и пароль соответственно.

Вы можете изменить имена баз данных (`db1`, `db2`, `db3`), пользователей (`user1`, `user2`, `user3`) и паролей (`password1`, `password2`, `password3`) в соответствии с вашими требованиями.
Берите файл docker-entrypoint.sh, находящийся по адресу /usr/local/bin. Внесите изменения в логику, чтобы можно было добавлять базы данных и пользователей. Затем соберите образ, используя измененный файл docker-entrypoint.sh. Получите выгоду от примененных изменений.
Похожие вопросы