我有多行环境变量:
SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E
我想通过--env-file
的docker run
参数使用文件传递此环境变量。当我使用--env-file
将此文件传递到Docker容器时,它失败并显示一条消息:
export SINGLE_LINE=VALUE
export MULTI_LINE="VA
LU E"
env > .env
docker run -ti --rm --env-file .env busybox sh
docker: poorly formatted environment: variable 'LU E' contains whitespaces.
See 'docker run --help'.
如何解决?
发生问题是因为docker解析此文件的方式,因此它不接受键名中的多行字符串和空格。参见相关的issue。
解决方法。从多行变量中去除所有行尾:
>.env
for var in $(compgen -v | grep -Ev '^(BASH)'); do
var_fixed=$(printf "%s" "${!var}" | tr -d '\n' )
echo "$var=${var_fixed}" >>.env
done
每行说明:
>.env
-使.env
为空文件for var in $(compgen -v | grep -Ev '^(BASH)'); do
-遍历env keysvar_fixed=$(printf "%s" "${!var}" | tr -d '\n' )
-从键值]中删除换行echo "$var=${var_fixed}" >>.env
-将键=值对写入.env
文件