-e команды docker run, поле environment или env_file в Compose. Они подходят для конфигурации приложения, но секреты не следует встраивать в image или хранить в публичном репозитории.
-e команды docker run, поле environment или env_file в Compose. Они подходят для конфигурации приложения, но секреты не следует встраивать в image или хранить в публичном репозитории.
Переменные через docker run
При ручном запуске контейнера используют флаг -e или --env.
docker run -e APP_ENV=production -e PORT=8000 my-app:latestПоле environment в Compose
В compose.yaml переменные можно передавать через словарь или список.
services:
web:
image: my-app:latest
environment:
APP_ENV: production
DATABASE_URL: postgresql://app:password@db:5432/app_dbФайл env_file
Если переменных много, их можно хранить в отдельном файле и передавать сервису через env_file.
services:
web:
image: my-app:latest
env_file:
- .envAPP_ENV=development
DATABASE_URL=postgresql://app:password@db:5432/app_dbПодстановка из окружения
Compose также может подставлять значения из окружения shell или файла .env в сам YAML-файл.
services:
web:
image: my-app:${APP_VERSION}Работа с секретами
Пароли, API keys и токены нельзя добавлять в Dockerfile через ENV или копировать в image: они могут сохраниться в слоях image. В production лучше использовать secrets manager, Docker secrets, Kubernetes secrets или защищённые переменные CI/CD. Локальный .env файл обычно добавляют в .gitignore и .dockerignore.
Как ответить на собеседовании
Для запуска контейнера использую -e, а в Docker Compose — environment или env_file. Обычную конфигурацию передаю через переменные окружения, но секреты не храню в image и не коммичу в репозиторий: для них применяю защищённое хранилище секретов.
Оцени свой прогресс