Docker LinuxDocker Desktop

Docker: После docker compose up контейнер не видит переменные окружения

  • Обновлено
  • Чтение ≈ 2 минуты

Краткий ответ

Файл .env в каталоге Compose может применяться только для подстановки переменных в compose.yaml; это НЕ гарантирует их появления внутри контейнера. Признак: docker compose config знает значение, но приложение его не получает.

В этой статье
  1. Как выглядит неисправность
  2. Причины и признаки
  3. Пошаговое устранение
  4. Как проверить результат
  5. Если проблема осталась

#Как выглядит неисправность

Файл .env в каталоге Compose может применяться только для подстановки переменных в compose.yaml; это НЕ гарантирует их появления внутри контейнера. Признак: docker compose config знает значение, но приложение его не получает.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
Нет environment или env_fileВ compose.yaml имя переменной не передано сервисуВ docker compose config у сервиса нет environmentНастроить environment/env_file
Изменён .env, контейнер старыйИзменённая конфигурация не применена к существующему контейнеруdocker inspect показывает прежнее окружениеПересоздать сервис без удаления томов

#Пошаговое устранение

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

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

  1. 6. Убедитесь, что приложение видит параметрПроверьте docker compose ps и рабочую страницу/журнал приложения. Для несекретного параметра допустимо проверить env через docker compose exec ИМЯ_СЕРВИСА printenv APP_MODE, если образ содержит printenv. При ошибке доступа/отсутствии команды проверяйте лог приложения.
    Linux · Терминал (Bash)Команда
    Читает состояние сервиса; журнал может содержать закрытые значения.
    docker compose ps
    docker compose logs --tail 30 ИМЯ_СЕРВИСА

#Как проверить результат

Переменная доступна приложению и подтверждается его корректной работой; отсутствуют ошибки «missing environment variable». При пустых значениях ещё раз проверьте разные проекты Compose и источник .env.

#Если проблема осталась

Не повторяйте опасные действия на рабочем окружении. Сравните первоначальный симптом с новым состоянием, сохраните обезличенные сообщения и версии компонентов, проверьте резервную копию; перед изменением общей истории Git или данных/сети Docker обратитесь к ответственному администратору проекта.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.