首页 > 解决方案 > 带有-ef标志的Docker exec

问题描述

flag有什么docker exec作用?-ef我试图在文档中找到它,但没有运气。

本主题没有帮助docker exec 或 docker container exec

标签: docker

解决方案


鉴于docker exec没有-f选项,f这里是-e( --env) 的参数,它通常接受对列表- 为'd 进程KEY=VALUE设置/修改的环境变量。exec

有趣的是,文档既没有描述--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'd 进程的此变量设置为当前为调用进程设置的值(实际上,事实证明,这种行为在docker run的文档中有所描述,并且docker exec只是行为相同,但未记录)。

回到原来的问题,答案是:将'd进程docker exec -ef的环境变量设置f为当前shell中变量的值,如果设置了这个变量,或者为'd进程取消设置,如果该变量当前没有放。execfexec


推荐阅读