При управлении контейнером PostgreSQL с помощью Docker Compose, настройка переменных окружения имеет важное значение для начального поведения контейнера и его перезапуска. В частности, время применения каждой переменной зависит от наличия тома данных, поэтому важно понимать это для безопасной эксплуатации.


1. Обязательные переменные окружения: POSTGRES_PASSWORD



Когда вы запускаете контейнер PostgreSQL как образ Docker, POSTGRES_PASSWORD является единственной обязательной переменной окружения, которую обязательно нужно установить, независимо от состояния тома данных.

Имя переменной Роль Время применения Действие при удалении
POSTGRES_PASSWORD Установка пароля суперпользователя Всегда нужно (начальная настройка и процесс запуска контейнера) Контейнер не удается запустить (ошибка безопасности)

Ключевое: Эта переменная является требованием безопасности для запуска контейнера, и она должна быть указана в файле docker-compose.yml, даже если данные уже существуют.


2. Переменные начальной настройки: понимание времени применения

POSTGRES_USER и POSTGRES_DB - это переменные окружения, которые применяются только при первоначальном создании кластера базы данных (когда том данных пуст).

Имя переменной Роль Время применения Влияние изменений при перезагрузке
POSTGRES_USER Указание имени суперпользователя по умолчанию Только когда том пуст Игнорируется (сохранение существующего пользователя)
POSTGRES_DB Создание имени базы данных по умолчанию Только когда том пуст Игнорируется (сохранение существующей базы данных)

📌 Принцип работы при перезагрузке

Когда вы перезапускаете контейнер с помощью команды docker-compose up -d, подключив том, в котором уже существуют данные, образ PostgreSQL пропускает процесс инициализации (initdb) и загружает существующие данные.

Поэтому, даже если вы измените имя контейнера, способ логирования и другие настройки, значения POSTGRES_USER или POSTGRES_DB не повлияют на имя или пользователя существующей базы данных.


3. Пример Docker Compose



Вот краткий пример файла docker-compose.yml, содержащий обязательные и рекомендуемые переменные.

services:
  db:
    image: postgres:latest
    restart: always
    container_name: my_postgres_db  # Имя контейнера (можно изменить)
    logging:
      driver: "json-file"          # Способ логирования (можно изменить)
    environment:
      # ⚠️ Обязательные переменные: должны быть указаны.
      POSTGRES_PASSWORD: your_secure_password 

      # Переменные начальной настройки: применяются только когда том пуст.
      POSTGRES_USER: devuser
      POSTGRES_DB: main_app_db
    ports:
      - "5432:5432"
    volumes:
      # Том для постоянного хранения данных
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

✨ Советы по эксплуатации: Безопасные изменения настроек

После изменения имени контейнера, настроек логирования и других параметров, чтобы перезапустить, сохранив существующие данные, используйте следующую команду.

docker-compose up -d

Внимание: Необходимо абсолютно избегать команды удаления тома с данными (docker-compose down -v).