docker:格式不正确的环境:变量包含空格

Fel*_*ikZ 8 environment-variables multiline docker

我有多行环境变量:

SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E
Run Code Online (Sandbox Code Playgroud)

我想使用文件通过--env-file的参数传递此环境变量docker run。当我使用 将此文件传递到 Docker 容器时--env-file,它失败并显示一条消息:

SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E
Run Code Online (Sandbox Code Playgroud)
docker: poorly formatted environment: variable 'LU E' contains whitespaces.
See 'docker run --help'.
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题?

Fel*_*ikZ 7

出现此问题的原因是 docker 解析此文件的方式不接受键名称中的多行字符串和空格。参见相关问题

解决方法。从多行变量中去除所有行结尾:

>.env
for var in $(compgen -v | grep -Ev '^(BASH)'); do
    var_fixed=$(printf "%s" "${!var}" | tr -d '\n' )
    echo "$var=${var_fixed}" >>.env
done
Run Code Online (Sandbox Code Playgroud)

每行解释:

  1. >.env- 使其.env成为一个空文件
  2. for var in $(compgen -v | grep -Ev '^(BASH)'); do- 迭代环境
  3. var_fixed=$(printf "%s" "${!var}" | tr -d '\n' )- 从键值中删除换行符
  4. echo "$var=${var_fixed}" >>.env- 将键=值对.env写入文件


thi*_*ign 7

对我来说,这是由于文件export中包含以下内容引起的.env

export ENDPOINT=https://endpoint.io
Run Code Online (Sandbox Code Playgroud)

相反做

ENDPOINT=https://endpoint.io
Run Code Online (Sandbox Code Playgroud)

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