Согласно https://docs.docker.com/engine/reference/builder/#run по умолчанию [Linux] для RUN
является /bin/sh -c
. Кажется, вы ожидаете багизмов, поэтому вы должны использовать «форму exec» для RUN
, чтобы указать вашу оболочку.
RUN ["/bin/bash", "-c", "source /usr/local/bin/virtualenvwrapper.sh"]
В противном случае, используя «оболочечную форму» RUN и указав другую оболочку приводит к вложенным оболочкам.
# don't do this...
RUN /bin/bash -c "source /usr/local/bin/virtualenvwrapper.sh"
# because it is the same as this...
RUN ["/bin/sh", "-c", "/bin/bash" "-c" "source /usr/local/bin/virtualenvwrapper.sh"]
Если у вас более 1 команды, которым требуется другая оболочка, вы должны прочитать https://docs.docker.com/engine/reference/builder/ #shell и измените оболочку по умолчанию, поставив ее перед вашими командами RUN:
SHELL ["/bin/bash", "-c"]
Наконец, если вы поместили что-либо в файл .bashrc
пользователя root, который вам нужен, вы можете добавьте флаг -l
в команду SHELL
или RUN
, чтобы сделать его оболочкой входа и убедитесь, что она получена.
Примечание. Я намеренно игнорировал тот факт, что это бессмысленно для источника сценарий как единственная команда в RUN.
Используя ваше определение дельты, позвольте n = 1/(1 + delta)
(или delta/(1 + delta)
), и все будет так, как вы описали.