docker exec
与-ef
标志一起做什么?我试图在文档中找到它
但没有运气。
答案 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 run和docker exec
的文档的行为方式相同,尽管未记录)。
回到原始问题,答案是:docker exec -ef
将f
进程的环境变量exec
设置为当前变量f
的值外壳程序(如果已设置此变量),或者在exec
的进程中未设置此变量(如果当前未设置该变量)。