docker:环境格式不正确:变量包含空格
docker: poorly formatted environment: variable contains whitespaces
我有多行环境变量:
SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E
我想通过 docker run
的 --env-file
参数使用文件传递此环境变量。
当我使用 --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 keys
var_fixed=$(printf "%s" "${!var}" | tr -d '\n' )
- 从键 value 中删除换行符
echo "$var=${var_fixed}" >>.env
- 将键=值对写入 .env
文件
对我来说,这是因为 .env
文件中有 export
:
export ENDPOINT=https://endpoint.io
改为
ENDPOINT=https://endpoint.io
另请参阅:https://github.com/docker/for-linux/issues/701#issuecomment-506884219
我有多行环境变量:
SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E
我想通过 docker run
的 --env-file
参数使用文件传递此环境变量。
当我使用 --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' )
- 从键 value 中删除换行符
echo "$var=${var_fixed}" >>.env
- 将键=值对写入.env
文件
对我来说,这是因为 .env
文件中有 export
:
export ENDPOINT=https://endpoint.io
改为
ENDPOINT=https://endpoint.io
另请参阅:https://github.com/docker/for-linux/issues/701#issuecomment-506884219