Как запустить команду eval $ (envkey-source) в Docker, используя Dockerfile? - PullRequest
0 голосов
/ 22 мая 2019

Я хочу запустить команду, eval $(envkey-source) для установки определенных переменных среды, используя envkey .Я устанавливаю его, устанавливаю переменную ENVKEY и затем пытаюсь импортировать все переменные окружения.Я делаю все это через Docker.Однако docker выдает ошибку в этой команде:

Step 31/35 : RUN     eval $(envkey-source)
 ---> Running in 6a9ebf1ede96
/bin/sh: 1: export: : bad variable name
The command '/bin/sh -c eval $(envkey-source)' returned a non-zero code: 2

Я пытался прочитать документацию envkey, но они ничего не рассказывают о Docker.

Я установил envkey с помощью следующих команд:

ENV     ENVKEY=yada_yada
RUN     curl -s https://raw.githubusercontent.com/envkey/envkey-source/master/install.sh | bash

Пока здесь все идет хорошо.На консоли я получаю подробные предложения о том, как запустить envkey для установки всех переменных среды.Проблема возникает на этой стороне:

RUN     eval $(envkey-source)

Ошибка:

Step 31/35 : RUN     eval $(envkey-source)
 ---> Running in 6a9ebf1ede96
/bin/sh: 1: export: : bad variable name
The command '/bin/sh -c eval $(envkey-source)' returned a non-zero code: 2

1 Ответ

0 голосов
/ 22 мая 2019

Вы не можете сделать это по нескольким причинам. Документация envkey в конце концов ссылается на пример в их GitHub , который вы можете найти информативным.

Каждая команда Dockerfile RUN запускает новую оболочку в новом контейнере. В частности, переменные окружения, установленные в команде RUN, теряются после ее выхода. Любая форма RUN export ... не допускается. Если переменные являются статическими, вы можете установить их, используя директиву ENV, но в этом случае, когда вы запускаете программу, которая должна генерировать их динамически, вам нужен другой подход.

Типичным примером здесь является использование сценария оболочки в качестве ENTRYPOINT вашего контейнера. Это делает некоторую начальную настройку, а затем заменяет себя контейнером CMD. Поскольку CMD работает в той же среде оболочки, что и остальная часть сценария, вы можете выполнить настройку динамической переменной здесь. Сценарий может выглядеть так:

#!/bin/sh
eval "$(envkey-source)"
exec "$@"

Еще одна вещь, о которой следует помнить, это то, что любой может docker inspect получить ваше изображение и вернуть его переменные среды, или docker run imagename /usr/bin/env. Если бы вы могли запустить envkey-source в Dockerfile, то переменные окружения были бы доступны на изображении в виде открытого текста, что противоречит цели. Даже встраивание ключа в изображение приводит к его утечке. Вы должны передать это во время выполнения, используя опцию docker run -e или ключ Docker Compose environment:, передавая его из среды хоста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...