【问题标题】:docker: poorly formatted environment: variable contains whitespacesdocker:格式错误的环境:变量包含空格
【发布时间】:2020-07-19 19:58:48
【问题描述】:

我有多行环境变量:

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 environment-variables multiline


    【解决方案1】:

    出现问题是因为 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 - 遍历环境 keys
    3. var_fixed=$(printf "%s" "${!var}" | tr -d '\n' ) - 从键 value 中删除换行符
    4. echo "$var=${var_fixed}" >>.env - 将 key=value 对写入 .env 文件

    【讨论】:

      【解决方案2】:

      对我来说,这是由于 export.env 文件中造成的:

      export ENDPOINT=https://endpoint.io
      

      改为

      ENDPOINT=https://endpoint.io
      

      另请参阅:https://github.com/docker/for-linux/issues/701#issuecomment-506884219

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-09-27
        • 1970-01-01
        • 2013-07-08
        • 2020-06-01
        • 2012-03-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多