В bash-подобной среде вы можете использовать:
keytool -list -v -keystore cacerts.jks | grep 'Alias name:' | grep -i foo
Эта команда состоит из 3 частей. Как указано выше, первая часть будет перечислять все доверенные сертификаты со всеми подробностями, поэтому вторая часть предназначена для фильтрации только информации о псевдонимах среди этих деталей. И, наконец, в третьей части вы можете найти конкретный псевдоним (или его часть). -i включает режим, нечувствительный к регистру. Таким образом, данная команда даст все псевдонимы, содержащие шаблон «foo», т. Е. foo, 123_FOO, fooBar и т. д. Для получения дополнительной информации man grep
.
Передайте переменную окружения:
docker run -e flag=somevalue my_image
Вы можете получить доступ к флагу через $flag
внутри Dockerfile
, который вы можете передать своему script
Вы должны быть в состоянии передать некоторую переменную окружения из команды 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] Это основная идея
Если вы используете форму массива 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 является довольно типичной установкой.