我们已经使用 direnv 来自动加载特定文件夹中的环境变量一段时间了。从版本 3 开始,docker-compose 似乎支持 .env 文件。
direnov使用的.envrc
文件export
:
export NODE_ENV=development
将同一个文件与 docker-compose 一起使用似乎不起作用,只是没有export
我得到了变量的值。
NODE_ENV=development
关于如何将其统一为单个.env
或.envrc
文件或 direnv 的替代方案的任何想法?
这是基于此答案的注释链的替代解决方案
Direnov附带了一个stdlib,可用于支持经典的"dotenv"设置
# myproject/.envrc - name of current file
# Usage:
# dotenv <optionalPathToDotEnvFile> or defaults to .env
dotenv
# myproject/.env
FOO=BAR
这在使用像Docker这样支持Dotenv风格的容器系统时特别有用。
2022 年更新:DireNV 现在除了支持.envrc
文件外,还支持.env
文件。
像这样启用它:
$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
之后将其关闭。