在内联运行命令中访问容器环境变量

时间:2015-11-18 11:13:13

标签: bash docker

任务很简单,我知道环境变量是(将)设置在容器内部,我想在我的内联运行命令中使用它。但是,该值不会填充:

docker run --rm --link other ubuntu printenv | grep OTHER_ENV_VAR_NAME && echo ${OTHER_ENV_VAR_NAME}

上述命令的当前输出为:

> OTHER_ENV_VAR_NAME=valueOfVariableInLinkedContainer
>

第二行的echo输出为空。我期望得到的是:

> OTHER_ENV_VAR_NAME=valueOfVariableInLinkedContainer
> valueOfVariableInLinkedContainer

printenv给出了正确的值,但传递给echo的值不正确。我建议在我的主机上评估值,而不是在容器内。因此,我尝试在echo命令周围使用单引号和双引号,并使用$转义\但没有成功。

我的主机也是Ubuntu。

1 个答案:

答案 0 :(得分:2)

为了在docker run的同一个CMD中管道和回显,使用shell命令(sh -c

docker run --rm --link other ubuntu sh -c 'printenv | grep OTHER_ENV_VAR_NAME && echo ${OTHER_ENV_VAR_NAME}'

如果不这样做,管道grep和echo将在主机 shell(执行docker run的shell)中发生。
这不会回应任何事情,因为环境值仅在docker会话中设置。