将所有主机环境variables传递给Docker容器的最简单的方法

使用docker运行一堆-e标志甚至一个.env似乎麻烦。

有没有简单的方法只是将所有的主机envvariables传递给一个docker容器

我同意那些build议你可能不想做你想做的事的评论者。 然而:

如果(a)你对具有特定前缀的环境variables感兴趣,并且(b)你的variables不包含任何空格,像这样的东西就可以工作…在这里,我将所有的XDG_*variables暴露给XDG_*容器:

 $ docker run -it --rm --env-file <(env | grep XDG) alpine sh / # env | grep XDG XDG_SEAT=seat0 XDG_SESSION_TYPE=x11 XDG_SESSION_ID=2 XDG_RUNTIME_DIR=/run/user/21937 XDG_MENU_PREFIX=gnome- XDG_CURRENT_DESKTOP=GNOME XDG_SESSION_DESKTOP=gnome XDG_VTNR=2 

如果你真的想要所有的环境variables,你可能需要编写一个较小的包装程序来产生正确的引用输出(以处理包含空格的variables),这将排除跨越多行的东西,比如BASH_FUNC_*variables。 那么你会用你的包装来代替env | grep ... env | grep ...在前面的例子中。

有两种方法可以使用-e标志:-e VAR = VALUE和-e VAR; 如果VAR已经被导出,那么第二种格式将使用导出的值而不会使其公开可读,另外,您不必担心将空格,引号等转义为VALUE。

所以如果你真的想把所有导出的variables传递给你的容器,试试这个:

 docker run ... $(env | cut -f1 -d= | sed 's/^/-e /') ...