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 выключает это потом.

Другие вопросы по тегам