docker-compose .env vs direnv .envrc
Asked Answered
U

3

22

We've been using direnv for quite some time now to automatically load environment variables in a specific folder. And since version 3, docker-compose seems to support .env files.

The .envrc files used by direnv use export:

export NODE_ENV=development

Using the same file with docker-compose doesn't seem to work, only without export I get the value for the variable.

NODE_ENV=development

Any ideas on how to unify this into a single .env or .envrc file or an alternative to direnv?

Undrape answered 19/12, 2017 at 3:20 Comment(0)
P
20

Here is an alternative solution based on the comment chain for this answer

direnv ships with a stdlib that can be used to support classical 'dotenv' settings

# myproject/.envrc - name of current file

# Usage: 
# dotenv <optionalPathToDotEnvFile> or defaults to .env
dotenv
# myproject/.env
FOO=BAR

this is especially helpful when using container systems like docker that support the dotenv style

Paregmenon answered 14/11, 2019 at 17:4 Comment(0)
S
13

2022 update: direnv now supports .env files in addition to .envrc files.

Enable it like so:

$HOME/.config/direnv/direnv.toml

[global]
load_dotenv = true
Sextuplicate answered 27/3, 2022 at 10:44 Comment(1)
Thank you for this. The description for this option is here: direnv.net/man/direnv.toml.1.html#codeloaddotenvcode . I have proposed some changes here to make load_dotenv more clearer here:github.com/direnv/direnv/pull/1099Satiate
H
11

I use the following setup to have variables available during dev from .envrc but using a docker-compose file for deployment:

In ./secrets define your variables as docker-compose needs them (without export):

foo=bar
secret_var=secret
...

In ./envrc export them to your shell:

#!bash
set -a
. ./secrets
set +a

set -a makes everything export by default, set +a turns this off afterwards.

Hudibrastic answered 1/2, 2018 at 9:19 Comment(3)
Another way to do this is to use the dotenv function in the .envrc. That is part of the direnv stdlib.Tasha
There is not much documentation on this, so refer to the discussion here: github.com/direnv/direnv/issues/284#issuecomment-315275436 it's really as simple as having dotenv in the .envrc file.Woken
the direnv stdlib can be found here direnv.net/man/direnv-stdlib.1.htmlParegmenon

© 2022 - 2024 — McMap. All rights reserved.