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

每行解释:

  1. >.env - 使 .env 成为一个空文件
  2. for var in $(compgen -v | grep -Ev '^(BASH)'); do - 遍历 env keys
  3. var_fixed=$(printf "%s" "${!var}" | tr -d '\n' ) - 从键 value
  4. 中删除换行符
  5. 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