带有-ef标志的Docker exec

时间:2019-07-25 21:22:50

标签: docker

docker exec-ef标志一起做什么?我试图在文档中找到它 但没有运气。

该主题没有帮助docker exec or docker container exec

1 个答案:

答案 0 :(得分:0)

鉴于docker exec没有-f选项,f-e--env)的自变量,而后者通常接受KEY=VALUE对的列表-为exec的进程设置/修改的环境变量。

有趣的是,the documentation既没有描述--env选项参数的确切格式,也没有说明如果参数不是通常的KEY=VALUE形式会发生什么。

考虑到-ef是一个有效的参数,逻辑上假设它将f视为环境变量的名称。此外,由于我们不提供值(名称后没有=),因此合理地假设变量将是不变的或未设置的。我们可以凭经验进行检查。创建具有其他环境变量集的容器:

$ docker run -d -e TESTVAR=testval --name test alpine sleep 1000

检查容器的实际环境:

$ docker exec test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27979b7f0ceb
TESTVAR=testval
HOME=/root

然后尝试使用exec运行-e TESTVAR

$ docker exec -e TESTVAR test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=27979b7f0ceb
HOME=/root

看起来变量未设置。但是如果TESTVAR当前在我们的shell中设置了怎么办?

$ export TESTVAR=12345
$ docker exec -e TESTVAR test env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
HOSTNAME=3fa7190750aa
TESTVAR=12345
HOME=/root

因此,传递没有名称的变量名似乎将exec进程的此变量设置为当前为调用进程设置的值(实际上,事实证明此行为在docker rundocker exec的文档的行为方式相同,尽管未记录)。

回到原始问题,答案是:docker exec -eff进程的环境变量exec设置为当前变量f的值外壳程序(如果已设置此变量),或者在exec的进程中未设置此变量(如果当前未设置该变量)。