docker-compose .env 与 direnv .envrc
Posted
技术标签:
【中文标题】docker-compose .env 与 direnv .envrc【英文标题】:docker-compose .env vs direnv .envrc 【发布时间】:2018-06-01 10:49:49 【问题描述】:我们已经使用direnv 来自动加载特定文件夹中的环境变量已经有一段时间了。而且从版本 3 开始,docker-compose 似乎是support .env files。
direnv 使用的.envrc
文件使用export
:
export NODE_ENV=development
使用与 docker-compose 相同的文件似乎不起作用,只有没有export
我才能得到变量的值。
NODE_ENV=development
关于如何将其统一到单个 .env
或 .envrc
文件或 direnv 的替代方案中的任何想法?
【问题讨论】:
【参考方案1】:这是基于this answer 的评论链的替代解决方案
direnv ships with a stdlib 可用于支持经典的 'dotenv' 设置
# myproject/.envrc
# dotenv <optionalPathToDotEnvFile>
dotenv
# myproject/.env
FOO=BAR
这在使用支持 dotenv 样式的容器系统(如 docker)时特别有用
【讨论】:
【参考方案2】:我使用以下设置在开发期间从.envrc
获得变量,但使用docker-compose
文件进行部署:
在./secrets
中定义你的变量,因为 docker-compose 需要它们(没有导出):
foo=bar
secret_var=secret
...
在./envrc
中将它们导出到你的shell:
#!bash
set -a
. ./secrets
set +a
set -a
默认导出所有内容,set +a
之后将其关闭。
【讨论】:
另一种方法是使用.envrc
中的dotenv
函数。这是 direnv 标准库的一部分。
这方面的文档不多,所以请参考这里的讨论:github.com/direnv/direnv/issues/284#issuecomment-315275436 真的就像在.envrc
文件中包含dotenv
一样简单。
direnv 标准库可以在这里找到direnv.net/man/direnv-stdlib.1.html以上是关于docker-compose .env 与 direnv .envrc的主要内容,如果未能解决你的问题,请参考以下文章
如何从.env文件获取环境变量到docker-compose.yml?
docker-compose 未定义的 process.env
可以将来自docker-compose.yml的env变量传递给dockerfile吗?