При управлении контейнером 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).
Комментариев нет.