docker: плохо отформатированная среда: переменная содержит пробелы - PullRequest
0 голосов
/ 07 апреля 2020

У меня есть многострочные переменные окружения:

SINGLE_LINE=VALUE
MULTI_LINE=VA
LU E

Я хочу передать переменные этой среды, используя файл через --env-file параметр docker run. Когда я передаю этот файл в контейнер Docker, используя --env-file, он завершается с сообщением:

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'.

Как это исправить?

1 Ответ

0 голосов
/ 07 апреля 2020

Проблема возникает из-за того, что 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

Каждая объясненная строка:

  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. echo "$var=${var_fixed}" >>.env - записать пара ключ = значение в .env файл
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...