环境变量未在Mac上显示

时间:2019-11-12 12:13:20

标签: bash macos unix terminal environment-variables

通过〜/ .bash_profile或〜/ .bashrc在shell外部设置的环境变量,尽管可以在shell中访问,但它们对docker或env都不会出现。

Bash_profile包含行TEST_ENV_VAR=123,重启终端后,可以通过$TEST_ENV_VAR访问该变量,但是docker和env无法访问此环境变量。

Henrys-MacBook-Pro:~ henry$ echo $TEST_ENV_VAR 
123          
Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR ubuntu env | grep TEST_ENV_VAR
Henrys-MacBook-Pro:~ henry$ env | grep TEST_ENV_VAR

终端仍然可以访问它,甚至将其传递给docker:

Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR=${TEST_ENV_VAR} ubuntu env | grep TEST_ENV_VAR
TEST_ENV_VAR=123

问题通常与环境变量无关,因为终端中设置的变量按预期工作:

Henrys-MacBook-Pro:~ henry$ export TEST_ENV_VAR=1234
Henrys-MacBook-Pro:~ henry$ docker run -it -e TEST_ENV_VAR ubuntu env | grep TEST_ENV_VAR
TEST_ENV_VAR=1234

我正在运行macOS Mojave,10.14.5,经典终端,docker 19.03.4,ls -al〜:输出

-rw-r--r--   1 henry  staff    455 Nov 12 11:50 .bash_profile

2 个答案:

答案 0 :(得分:2)

docker实际上并不启动容器。而是向Docker引擎发送一条消息(在与执行docker的环境无关的单独环境中运行),请求 it 为您启动一个容器。因此,新容器不会在您当前的Shell环境中继承任何变量。

尝试TEST_ENV_VAR=${TEST_ENV_VAR}时,您明确地告诉docker创建一个名为TEST_ENV_VAR的环境变量,并使用扩展TEST_ENV_VAR now产生的值,在新容器中,而不是尝试从适当的环境继承该变量。

即使忽略这一点,您实际上也没有使用TEST_ENV_VAR=123创建环境变量;您只创建了一个普通的shell变量。为了使env能够看到它,您需要先将其导出。

$ TEST_ENV_VAR=123
$ env | grep TEST_ENV_VAR
$ export TEST_ENV_VAR
$ env | grep TEST_ENV_VAR
TEST_ENV_VAR=123

答案 1 :(得分:1)

.bash_profile适用于您的用户。 Docker在自己的环境中运行(而不是在用户生成的子shell中运行)。导出仅将信息发送到子外壳中。您需要使该变量在更高级别可用。

/etc/environment 

在那儿要小心。

或者,您可以考虑要求Docker自己进行这些更改。