Возможно ли передать пользовательские переменные окружения в контейнер Docker?

Некоторые клиентские библиотеки, такие как GitHub - googleapis/google-auth-library-ruby: Google Auth Library for Ruby · GitHub, требуют, чтобы учетные данные для аутентификации были установлены как переменные окружения. Возможно ли передать их через файл yml?

Я пробовал:

  1. Добавить export VAR=VALUE в секцию пользовательских команд файла yml.
  2. Добавить VARIABLE: VALUE в секцию env файла yml.

@merefield указал мне, что это действительно возможно.

В разделе пользовательских команд выполните:

# добавляет переменную в файл .bashrc
exec: echo 'export VAR=value' >> ~/.bashrc
...
# перезагружает файл
exec: source ~/.bashrc

Я могу подтвердить, что этот подход действительно работает. :slight_smile:

P.S.
Непонятно, почему source ~/.bashrc не обновляет окружение. Возможно, это вызывается слишком рано.

Также пробовал:
- exec: /bin/bash -c "source ~/.bashrc"

Разве нельзя использовать секцию env: в определении контейнера для этого? Это должно создать переменную окружения, к которой сможет обратиться приложение Rails.

Например:

env:
  CUSTOM_ENV: "value"

Иначе, похоже, что pups уже передаёт переменные окружения с хоста.

Это выдаёт ошибку, связанную с Docker. Было бы очень интуитивно, если бы это работало так. :slight_smile: Или я схожу с ума. Кажется, есть правило, разрешающее пользовательские переменные, начинающиеся с DISCOURSE_.

Завтра, когда сяду за рабочий стол, ещё раз попробую с переменными окружения.

Так, я был неправ. Это работает нормально. Проблема была из-за многострочного значения. Я его убрал, и сборка прошла успешно. Но вопрос в том, как использовать многострочные значения?

Ура, у меня получилось! Проблема заключалась в том, что я использовал приватный ключ RSA как переменную окружения. Вот что нужно сделать, чтобы это заработало.

Оберните ваш ключ в одинарные кавычки '' и добавьте лишний \ перед всеми \n, которые встречаются в ключе. То есть \n превратится в \\n.

Просто к сведению: есть более простые способы сделать это, чем вручную обновлять все символы \n.

Например, так:

key: |
  ---BEGIN SECRET KEY---
  SHH do not read this is secret
  ---END SECRET KEY---

Вы имеете в виду вставку средней части ключа как есть? Это было бы немного чище.

Я имею в виду, что YML поддерживает многострочные строки, начиная с символа | (и его опциональных вариаций).

Вы можете затем вставить ключ как есть, без изменений (за исключением отступов в начале строки).

Я попробовал глупую вещь: я добавил | и реальную новую строку вместо каждого \n, но это не сработало.