Хранить пароли прямо в docker-compose.yml — плохая практика. Правильный способ — docker compose env через файл .env или директиву env_file.
Как работает .env файл в Docker Compose
Docker Compose автоматически читает .env из текущей директории. Переменные подставляются через ${VARIABLE}:
# .env файл
POSTGRES_PASSWORD=supersecret
N8N_ENCRYPTION_KEY=myrandomkey32chars
DOMAIN=example.com
# docker-compose.yml
services:
postgres:
environment:
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
n8n:
environment:
N8N_ENCRYPTION_KEY: ${N8N_ENCRYPTION_KEY}
WEBHOOK_URL: https://${DOMAIN}/
docker compose version: какую указывать
Docker compose version — версия формата файла (не программы). Рекомендуется "3.8" или не указывать вовсе (Docker Compose v2 определит автоматически).
Передача переменных в docker compose container
Иногда нужно передать переменную из окружения хоста в docker compose container:
export MY_SECRET=value123
services:
app:
environment:
- MY_SECRET # без = берётся с хоста
Приоритет переменных
docker compose run -e VAR=value- Секция
environment:в docker-compose.yml - Файл
.envв директории - Переменные окружения shell
- Значения по умолчанию
${VAR:-default}
Безопасность
- ❌ Не коммитить
.envв git — добавьте в.gitignore - ✅ Для разных окружений:
docker compose --env-file .env.prod up -d
ubuntu install docker compose
Ubuntu install docker compose:
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
docker compose version
Подробнее — в статье Docker Compose: полный гайд.