docker容器中的环境变量 - 它是如何工作的?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了docker容器中的环境变量 - 它是如何工作的?相关的知识,希望对你有一定的参考价值。
我无法理解一些事情,即我们知道我们可以传递给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
?
答案
问题是你的$ 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
你必须引用它,所以它作为字符串文字传递给容器。然后它工作正常。
另一答案
环境不是特定于shell的。即使普通的流程也有环境。它们对shell和普通进程的工作方式相同。这是因为shell是普通的进程。
当您执行SOMEVAR=13 someBinary
时,您为新进程someBinary定义了一个名为SOMEVAR的环境变量。你可以在docker中使用-e
执行此操作,因为您要求另一个进程启动您的进程,即docker守护程序。
以上是关于docker容器中的环境变量 - 它是如何工作的?的主要内容,如果未能解决你的问题,请参考以下文章
从 docker-compose 替换 NGINX 配置中的环境变量