如何使用docker exec将所有环境变量传入容器
无需临时文件实现
docker exec 传入当前Shell所有环境变量 需求背景
执行docker exec时,通常通过-e参数逐个指定要传入容器的环境变量,示例:
docker exec -ti -e VAR=1 -e HOME container_name command
但希望无需逐个指定,直接传入当前Shell的所有环境变量(类似sudo -E的效果),且不想使用创建临时文件的方案:
env > env_vars && docker exec -ti --env-file ./env_vars container_name command
寻求一步式的Bash技巧实现。
一步式解决方案
利用Bash的进程替换特性,直接将env的输出作为虚拟文件传递给--env-file参数,无需创建实体临时文件:
docker exec -ti --env-file <(env) container_name command
原理:<(env)会让Bash创建一个匿名管道,把env命令输出的环境变量内容作为虚拟文件提供给docker exec使用,完全替代临时文件的作用且不会在磁盘留下痕迹。
重要提示
- 传入所有环境变量违背容器进程隔离的设计初衷,此方案仅用于技术探讨,不建议在实际场景中使用。
- 该方案依赖Bash的进程替换特性,在POSIX标准Shell(如
sh)中无法运行。
内容的提问来源于stack exchange,提问作者Nagev
相关产品推荐
相关产品推荐

