🛠️ Переменная есть в Docker Compose, но приложение её не видит?
Проверьте, о каком механизме идёт речь.
Подстановка в Compose-файл:
services: app: environment: APP_MODE: ${APP_MODE}
Значение может поступить из оболочки, файла .env или файла, указанного через --env-file.
Посмотреть итоговую конфигурацию можно командой:
docker compose config
Она показывает модель после объединения файлов и подстановки переменных. Перед публикацией вывода проверьте, нет ли в нём секретов.
env_file внутри описания сервиса — другой механизм: он передаёт переменные в контейнер.
ARG также не решает эту задачу автоматически. Он предназначен для этапа сборки и сам по себе не становится переменной окружения запущенного контейнера. Секреты через ARG и ENV передавать не следует.
Проверка работающего контейнера:
docker compose exec app printenv APP_MODE
Здесь сервис называется app.
Команда запускает новый процесс внутри контейнера. Она показывает его окружение, но не подтверждает, что основное приложение прочитало и применило значение. В минимальном образе утилита printenv также может отсутствовать.
Если конфигурация изменилась, а контейнер не был пересоздан, он может продолжать работать со старым окружением.
Для docker stack deploy правила подстановки .env нужно проверять отдельно.
Сохраните эту последовательность диагностики.