docker:格式较差的环境:变量包含空格

问题描述 投票:-1回答:1

我有多行环境变量:

SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E

我想通过--env-filedocker 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 environment-variables multiline
1个回答
0
投票

发生问题是因为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' )-从键]中删除换行
  4. [echo "$var=${var_fixed}" >>.env-将键=值对写入.env文件
© www.soinside.com 2019 - 2024. All rights reserved.