Работа с переменными окружения в Docker
Переменные окружения (environment variables) — важнейшая часть конфигурации контейнеров Docker. Они позволяют передавать параметры, секреты, настройки и переключать окружения (dev/prod) без необходимости пересборки образа.
📦 Способы задания переменных окружения
1. Через флаг -e
в docker run
Можно также использовать синтаксис:
2. Через файл .env
Создаёшь файл .env
:
Подключаешь его:
Файл должен быть в формате
KEY=VALUE
, без кавычек, пробелов вокруг=
.
3. Через ENV
в Dockerfile
📌 Значения, заданные в Dockerfile
, могут быть переопределены при запуске через -e
или --env-file
.
4. Через ARG
и ENV
в Dockerfile (для сборки)
И при сборке:
ARG
— переменные для сборки образа, аENV
— переменные для работы контейнера.
📂 Просмотр переменных в контейнере
-
Посмотреть все переменные окружения:
-
Проверить конкретную:
🔐 Передача секретов
Хранение конфиденциальных данных в переменных:
Рекомендуется использовать
.env
в.gitignore
, чтобы не коммитить секреты.
💡 Распространённые переменные
Назначение | Пример |
---|---|
Тип окружения | ENV=production |
Логирование | DEBUG=true |
Порты | PORT=3000 |
API ключи | API_KEY=abcdef12345 |
Настройка базы | POSTGRES_USER=admin |
Веб-серверы | NODE_ENV=development |
🧪 Практические сценарии
🧪 Переключение окружения без пересборки:
🔁 Мульти-среда (prod/dev/test)
🐳 Использование вместе с Compose
Если используешь docker-compose.yml
, переменные также можно подставлять через ${VARNAME}
:
🗃️ Использование переменных окружения с базами данных
Многие официальные Docker-образы баз данных позволяют задавать параметры через переменные окружения. Это удобный способ: - автоматизировать создание БД и пользователя, - передавать пароль без необходимости вручную конфигурировать систему, - использовать одинаковую структуру в разных средах.
📌 Примеры: PostgreSQL
docker run -d \
-e POSTGRES_DB=mydatabase \
-e POSTGRES_USER=myuser \
-e POSTGRES_PASSWORD=mypassword \
-v pgdata:/var/lib/postgresql/data \
postgres:15-alpine
Переменная | Описание |
---|---|
POSTGRES_DB |
Имя создаваемой БД |
POSTGRES_USER |
Имя пользователя |
POSTGRES_PASSWORD |
Пароль пользователя |
📌 Примеры: MySQL
docker run -d \
-e MYSQL_DATABASE=mydatabase \
-e MYSQL_USER=myuser \
-e MYSQL_PASSWORD=mypass \
-e MYSQL_ROOT_PASSWORD=rootpass \
mysql:8
Переменная | Описание |
---|---|
MYSQL_DATABASE |
Имя создаваемой БД |
MYSQL_USER |
Имя пользователя |
MYSQL_PASSWORD |
Пароль пользователя |
MYSQL_ROOT_PASSWORD |
Пароль root-пользователя |
📌 Примеры: MongoDB
docker run -d \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=adminpass \
mongo
🧠 Совет по безопасности
- Никогда не коммить
.env
с паролями в git - Используй
docker secrets
или внешние менеджеры (Vault, AWS Secrets Manager) в продакшене
📚 Резюме
Способ | Где используется | Переопределяется? |
---|---|---|
-e / --env |
docker run |
✅ Да |
--env-file |
docker run , Compose |
✅ Да |
ENV в Dockerfile |
При сборке | ✅ Да |
ARG в Dockerfile |
Только на этапе сборки | ❌ Нет |