docker容器中的环境变量 - 它是如何工作的?

问题描述 投票:0回答:2

我无法理解一些事情,即我们知道我们可以传递给docker run论证-e SOME_VAR=13。 然后启动的每个进程(例如使用docker exec ping localhost -c $SOME_VAR=13)都可以看到此变量。

它是如何工作的 ?毕竟,环境是关于bash,我们不发布bash。我无法理解。你能解释一下-e如何在没有shell的情况下工作吗?

例如,让我们看下面的例子:

[user@user~]$ sudo docker run -d -e XYZ=123 ubuntu sleep 10000
2543e7235fa9
[user@user~]$ sudo docker exec -it 2543e7235fa9 echo test
test
[user@user~]$ sudo docker exec -it 2543e7235fa9 echo $XYZ
<empty row>      

为什么我得到<empty row>而不是123

linux bash docker environment-variables containers
2个回答
2
投票

问题是你的$ XYZ是在主机shell环境中插入的,而不是你的容器。

$ export XYZ=456
$ docker run -d -e XYZ=123 ubuntu sleep 10000
$ docker exec -it $(docker ps -ql) echo $XYZ
$ 456
$ docker exec -it $(docker ps -ql) sh -c 'echo $XYZ'
$ 123

你必须引用它,所以它作为字符串文字传递给容器。然后它工作正常。


0
投票

环境不是特定于shell的。即使普通的流程也有环境。它们对shell和普通进程的工作方式相同。这是因为shell是普通的进程。

当您执行SOMEVAR=13 someBinary时,您为新进程someBinary定义了一个名为SOMEVAR的环境变量。你可以在docker中使用-e执行此操作,因为您要求另一个进程启动您的进程,即docker守护程序。

© www.soinside.com 2019 - 2024. All rights reserved.