ENTRYPOINT с переменными среды и переопределенным CMD - PullRequest
0 голосов
/ 22 января 2019

Это позволяет $ENV_VAR быть переданным foo

ENTRYPOINT /usr/bin/foo $ENV_VAR

Это не так, поскольку передается литеральная строка "$ ENV_VAR", а не содержимое переменной среды.

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]

Это позволяет переопределить CMD

ENTRYPOINT ["/usr/bin/foo"]
CMD ["--some-flag"]

Это не позволяет CMD добраться до точки входа. Это появляется , чтобы запустить его в двух отдельных командах. т.е.: sh /usr/bin/foo && sh --some-flag

ENTRYPOINT /usr/bin/foo
CMD --some-flag

Как мне сделать ENTRYPOINT, которая использует переменные окружения и имеет переопределенную CMD? В идеале с формой следующим образом

примечание: это не работает

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]
CMD ["--some-flag"]

1 Ответ

0 голосов
/ 22 января 2019

примечание: это не работает

ENTRYPOINT ["/usr/bin/foo", "$ENV_VAR"]
CMD ["--some-flag"]

Это будет запускать foo с $ENV_VAR в качестве первого аргумента и --some-flag в качестве второго аргумента. Вам нужно, чтобы $ENV_VAR был переведен в значение переменной среды, и это делается с помощью оболочки. Синтаксис json для ENTRYPOINT / CMD явно отключает оболочку, поэтому ваш исполняемый файл может расширить это значение.


Если вы попытаетесь изменить ENTRYPOINT на синтаксис оболочки с помощью:

ENTRYPOINT /usr/bin/foo "$ENV_VAR"
CMD ["--some-flag"]

Вы найдете, что докер переводит это на выполнение:

/bin/sh -c "/usr/bin/foo \"$ENV_VAR\"" "--some-flag"

И если вы посмотрите документацию по опции -c, вы увидите, что для этого требуется только один аргумент. Так что эта опция не будет работать для опции --some-flag, которая передается вне кавычек.


Самое простое решение - переместить его в сценарий оболочки:

#!/bin/sh
exec /usr/bin/foo "$ENV_VAR" "$@"

Скопируйте это как entrypoint.sh в ваш контейнер:

COPY entrypoint.sh /
RUN chmod 755 /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["--some-flag"]

Обратите внимание, что команда chmod необходима только в том случае, если вы не можете сделать свой скрипт исполняемым на всех сборочных хостах / в репозиториях кода (иногда это наблюдается у пользователей Windows).

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