#Как выглядит неисправность
Файл .env в каталоге Compose может применяться только для подстановки переменных в compose.yaml; это НЕ гарантирует их появления внутри контейнера. Признак: docker compose config знает значение, но приложение его не получает.
#Причины и признаки
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет environment или env_fileВ compose.yaml имя переменной не передано сервису | В docker compose config у сервиса нет environment | Настроить environment/env_file |
| Изменён .env, контейнер старыйИзменённая конфигурация не применена к существующему контейнеру | docker inspect показывает прежнее окружение | Пересоздать сервис без удаления томов |
#Пошаговое устранение
- 1. Проверьте версию и каталог проектаОткройте терминал в папке, где расположен compose.yaml, выполните docker compose version и docker compose config --services. Убедитесь, что выбрали нужный сервис; если файл не найден, перейдите в правильный каталог.Linux · Терминал (Bash)КомандаЧтение списка сервисов без вывода секретов.
docker compose versiondocker compose config --services
- 2. Проверьте присутствие нужного имени в YAMLОткройте compose.yaml в текстовом редакторе и найдите services: → имя сервиса → environment или env_file. Файл .env рядом с compose.yaml сам по себе не равен env_file; для контейнера требуется явная передача переменных.
- 3. Проверьте подстановку без раскрытия секретовВыполните docker compose config --environment и docker compose config, но не отправляйте вывод в общие чаты: там могут присутствовать значения. Для конфиденциального имени достаточно проверить, задано ли оно в редакторе. При пустой подстановке изучите приоритет переменной оболочки и выбранного --env-file.Linux · Терминал (Bash)КомандаМожет показать секретные значения! Только локальный просмотр; не сохранять в публичный отчёт.
docker compose config --environment
- 4. Добавьте явную передачу в сервисДля несекретного параметра в compose.yaml укажите environment: с переменной, например APP_MODE: "production". Для секрета используйте штатные secrets или секреты оркестратора. Сохраните файл и запустите docker compose config, чтобы убедиться в корректном YAML.Linux · Терминал (Bash)КомандаПроверяет синтаксис итоговой конфигурации, не запускает контейнер.
docker compose config --quiet
- 5. Пересоздайте только нужный тестовый сервисПосле резервной копии состояния и согласования перезапуска выполните docker compose up -d --no-deps --force-recreate ИМЯ_СЕРВИСА. Это вызывает краткий простой и пересоздаёт контейнер, но не должно удалять именованные тома; не используйте down -v.Linux · Терминал (Bash)С осторожностьюИзменяет контейнер и может вызвать простой. Подставьте реальное имя сервиса.
docker compose up -d --no-deps --force-recreate ИМЯ_СЕРВИСАКоманда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.
- 6. Убедитесь, что приложение видит параметрПроверьте docker compose ps и рабочую страницу/журнал приложения. Для несекретного параметра допустимо проверить env через docker compose exec ИМЯ_СЕРВИСА printenv APP_MODE, если образ содержит printenv. При ошибке доступа/отсутствии команды проверяйте лог приложения.Linux · Терминал (Bash)КомандаЧитает состояние сервиса; журнал может содержать закрытые значения.
docker compose psdocker compose logs --tail 30 ИМЯ_СЕРВИСА
#Как проверить результат
Переменная доступна приложению и подтверждается его корректной работой; отсутствуют ошибки «missing environment variable». При пустых значениях ещё раз проверьте разные проекты Compose и источник .env.
#Если проблема осталась
Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.