docker-compose .env vs direnv .envrc
Мы уже давно используем direnv для автоматической загрузки переменных среды в определенную папку. А начиная с версии 3, docker-compose поддерживает файлы.env.
.envrc
файлы, используемые директивой export
:
export NODE_ENV=development
Использование того же файла с docker-compose, похоже, не работает, только без export
Я получаю значение для переменной.
NODE_ENV=development
Любые идеи о том, как объединить это в единый .env
или же .envrc
файл или альтернатива direnv?
3 ответа
Вот альтернативное решение, основанное на цепочке комментариев для этого ответа
Direnv поставляется с stdlib, который можно использовать для поддержки классических настроек dotenv.
# myproject/.envrc
# dotenv <optionalPathToDotEnvFile>
dotenv
# myproject/.env
FOO=BAR
это особенно полезно при использовании контейнерных систем, таких как docker, которые поддерживают стиль dotenv.
Обновление 2022: direnv теперь поддерживает
.env
файлы в дополнение к
.envrc
файлы.
Включите его так:
$HOME/.config/direnv/direnv.toml
[global]
load_dotenv = true
Я использую следующую настройку, чтобы переменные были доступны во время разработки с .envrc
но используя docker-compose
файл для развертывания:
В ./secrets
Определите ваши переменные так, как это нужно для docker-compose (без экспорта):
foo=bar
secret_var=secret
...
В ./envrc
экспортируйте их в свою оболочку:
#!bash
set -a
. ./secrets
set +a
set -a
по умолчанию все экспортирует, set +a
выключает это потом.