Передайте ARG в docker ENTRYPOINT - PullRequest
0 голосов
/ 20 февраля 2020

Я запускаю свое приложение в Azure Службах приложений, поэтому у меня нет доступа к команде docker run. Теперь я хочу передать некоторые переменные в ENTRYPOINT, для которых я пытаюсь использовать ARG во время самой сборки. Вот как это выглядит:

docker build -t $IMAGE_NAME --build-arg env=dev --build-arg amplify_key=xxxxxxxxxxxxxx .

В моем Dockerfile

ARG env
ARG amplify_key

ENTRYPOINT ["/bin/bash", "-c", "init.sh $env $amplify_key"]

Но, похоже, это не работает. Пожалуйста, дайте мне знать проблему.

1 Ответ

0 голосов
/ 20 февраля 2020

$variable ссылки могут быть расширены либо в Dockerfile, либо с помощью оболочки при запуске команды. Только некоторые команды Dockerfile выполняют расширения переменных ; для RUN, CMD и ENTRYPOINT это делается только оболочкой. Когда оболочка выполняет расширение, она не знает о Docker -specifi c ARG, только о переменных среды, поэтому вам необходимо скопировать аргумент в ENV. пример этого есть в документации Dockerfile .

ARG env
ARG amplify_key
ENV env=$env amplify_key=$amplify_key
CMD init.sh $env $amplify_key

Предполагая, что init.sh - ваш собственный скрипт, хотя, если у вас есть эти значения в переменных среды, вы можете просто получить к ним доступ напрямую, без передачи их через позиционные параметры.

#!/bin/sh
echo "Running in $env environment"
curl -H "Authorization: Bearer $amplify_key" ...
ARG env
ARG amplify_key
ENV env=$env amplify_key=$amplify_key
CMD ["init.sh"]

Это позволяет упростить переопределение значений переменных во время запуска, а если вам нужно вручную ввести параметры для команды, Набор обязательных опций намного меньше. Если вы используете шаблон ENTRYPOINT, выполняя некоторую первоначальную настройку, а затем запускаете exec "$@" для запуска CMD, это также работает намного лучше (ENTRYPOINT и sh -c имеют некоторые сложные взаимодействия).

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