получить доступ к значению переменной среды в docker ENTRYPOINT (exe c) из второго параметра (со скриптом customerentrypoint в качестве первого параметра) - PullRequest
0 голосов
/ 27 марта 2020

Я хочу получить доступ к значению одной из переменных environment в моем dockerfile и передать его как первый argument в main script в docker ENTRYPOINT.

I наткнулся на эту ссылку , которая показывает два способа сделать это. один с exec form и один с shell form.

exec form работал нормально, отображая переменную окружения с ["sh", "-c", "echo $VARIABLE"], но когда я попытался с помощью моего собственного сценария точки входа ENTRYPOINT ["/bin/customentrypoint.sh", "$VARIABLE"], он не смог получить значение для переменной, вместо этого просто взять его как константу $VARIABLE.

Так что я пошел с shell form подходом и просто назвал ENTRYPOINT /bin/customentrypoing "$VARIABLE", и он работал нормально, чтобы получить значение $VARIABLE но похоже, что это ограничивает количество аргументов командной строки в этом случае. так как я получаю только одно значение $@ даже после передачи других аргументов командной строки от docker run. Может кто-то помочь мне, если я делаю что-то не так, или я должен решить эту проблему по-другому. Заранее спасибо.

docker выглядит аналогично команде

#!/usr/bin/env bash
...
ENV VARIABLE NO
...
RUN echo "#!/bin/bash" > /bin/customentrypoint.sh
RUN echo "if  [ "\"\$1\"" = 'YES' ] ; then ; python ${LOCATION}/main.py" \"\$@\" "; else ; echo Please select -e VARIABLE=YES ; fi" >> /bin/customentrypoint.sh
RUN chmod +x /bin/customentrypoint.sh
RUN ln -s -T /bin/customentrypoint.sh /bin/customentrypoint
WORKDIR ${LOCATION}
ENTRYPOINT /bin/customentrypoint "$VARIABLE"         # - works fine but limits no of command line arguements
# ENTRYPOINT ["bin/customentrypoint", "$VARIABLE"]   # not able to get value of $VARIABLE instead taking as constant.

, которую я использую

docker run --rm -v $PWD:/mnt -e VARIABLE=VALUE docker_image:tag entrypoint -d /mnt/tmp -i /mnt/input_file 

1 Ответ

0 голосов
/ 29 марта 2020

Среда для CMD интерпретируется немного по-разному в зависимости от того, как вы пишете аргументы. Если вы передадите CMD в виде строки (не внутри массива), она будет запущена как оболочка вместо exe c. См. https://docs.docker.com/engine/reference/builder/#cmd.

. Что вы можете попробовать, если хотите использовать массив, это

ENTRYPOINT ["/bin/sh", "-c", "echo ${VARIABLE}"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...