use*_*342 16 environment-variables docker
使用docker运行一堆-e标志甚至是.env似乎很麻烦.
有没有简单的方法将所有主机env变量传递给docker容器
lar*_*sks 19
我同意那些建议你可能不想做你想做的事情的评论者.然而:
如果(a)你对具有特定前缀的环境变量感兴趣,并且(b)你的变量不包含任何空格,那么这样的东西就可以工作......在这里,我将所有XDG_*变量暴露给一个docker容器:
$ 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
Run Code Online (Sandbox Code Playgroud)
如果你真的想要所有的环境变量,你可能需要编写一个较小的包装器程序来生成正确的引用输出(处理包含空格的变量),这将排除跨越多行的事物,比如BASH_FUNC_*变量.然后,您将使用您的包装器代替上env | grep ...一个示例中的包装器.
小智 9
有两种方法可以使用-e标志:-e VAR = VALUE和-e VAR; 如果VAR已经导出,那么第二种格式将使用导出的值而不会使其公开可读,而且您不必担心转义VALUE以防止空白,引号等.
因此,如果您确实要将所有导出的变量传递给容器,请尝试以下操作:
docker run ... $(env | cut -f1 -d= | sed 's/^/-e /') ...
Run Code Online (Sandbox Code Playgroud)
将user3324033和larsk的答案混在一起,这对我来说是最合适的,以获得所有导出的环境变量和模拟奇异行为:
docker run [...] --env-file <( env| cut -f1 -d= ) [...]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6921 次 |
| 最近记录: |