将所有主机环境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 /') ...