docker-compose .env vs direnv .envrc

15.2k Views Asked by At

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?

3

There are 3 best solutions below

0
On BEST ANSWER

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

1
On

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
3
On

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.