Как установить флаг в точке входа контейнера Docker

В bash-подобной среде вы можете использовать:

keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo

Эта команда состоит из 3 частей. Как указано выше, первая часть будет перечислять все доверенные сертификаты со всеми подробностями, поэтому вторая часть предназначена для фильтрации только информации о псевдонимах среди этих деталей. И, наконец, в третьей части вы можете найти конкретный псевдоним (или его часть). -i включает режим, нечувствительный к регистру. Таким образом, данная команда даст все псевдонимы, содержащие шаблон «foo», т. Е. foo, 123_FOO, fooBar и т. д. Для получения дополнительной информации man grep.

0
задан Relyativist 11 March 2019 в 14:01
поделиться

3 ответа

Передайте переменную окружения:

docker run -e flag=somevalue my_image

Вы можете получить доступ к флагу через $flag внутри Dockerfile, который вы можете передать своему script

0
ответ дан Fritz Duchardt 11 March 2019 в 14:01
поделиться

Вы должны быть в состоянии передать некоторую переменную окружения из команды run в CMD до запуска «cmd». Для этого попробуйте использовать предложение ' -e ' следующим образом (не проверено, но должно работать):

docker run my_image -e 'EXTRA_OPTS=--some-flag'

и в вашей команде:

fmriprep /input /output participant --fs-license-file 
/opt/freesurfer/license.txt --use-aroma --ignore fieldmaps --n_cpus 12 -- 
force-bbr --participant_label "${ids[@]}" -w /output $EXTRA_OPTS
[ 115] Это основная идея

0
ответ дан Marvin 11 March 2019 в 14:01
поделиться

Если вы используете форму массива JSON ENTRYPOINT, то все в CMD передается в качестве аргументов командной строки в точку входа.

Я бы посоветовал не пытаться писать сложные встроенные сценарии в файле Dockerfile или docker-compose.yml. Напишите обычный сценарий, COPY его на изображении, и сделайте этот сценарий ENTRYPOINT. Он может ссылаться на переменную оболочки "$@" для запуска ее CMD.

Например, я мог бы реорганизовать ваш скрипт в:

#!/bin/bash
# I am /entrypoint.sh
"$@" | ts '[%Y-%m-%d %H:%M:%S]' &>> /output/stderr.log
#!/bin/bash
# I am /run.sh
fmriprep /input /output participant --fs-license-file  /opt/freesurfer/license.txt --use-aroma --ignore fieldmaps --n_cpus 12 --force-bbr --participant_label "${ids[@]}" -w /output $EXTRA_OPTS

, а затем написать Dockerfile:

...
COPY entrypoint.sh run.sh /
ENTRYPOINT ["/entrypoint.sh"]
CMD ["/run.sh"]

И тогда вы сможете запустить: [1117 ]

docker run my_image /run.sh --some-flag

Вы также можете запускать обычные команды отладки, например:

docker run --rm -it my_image /bin/sh
docker run --rm my_image cat /run.sh

В этом конкретном примере я, вероятно, полагаюсь на какую-нибудь внешнюю систему для форматирования и захвата сообщений журнала, а не для попытки сделай это внутри контейнера. Например, маршрутизация журналов контейнера Docker в logstash является довольно типичной установкой.

0
ответ дан David Maze 11 March 2019 в 14:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: