Как запустить функцию bash в Dockerfile
у меня есть функция в bash nvm
определена в /root/.profile
. docker build
не удалось найти эту функцию, когда я называю его в RUN
шаг.
RUN apt-get install -y curl build-essential libssl-dev &&
curl https://raw.githubusercontent.com/creationix/nvm/v0.16.1/install.sh | sh
RUN nvm install 0.12 &&
nvm alias default 0.12 &&
nvm use 0.12
ошибка
Step 5 : RUN nvm install 0.12
---> Running in b639c2bf60c0
/bin/sh: nvm: command not found
мне удалось позвонить nvm
, заключив с bash -ic
загрузки /root/.profile
.
RUN bash -ic "nvm install 0.12" &&
bash -ic "nvm alias default 0.12" &&
bash -ic "nvm use 0.12"
вышеуказанный метод работает нормально, но он имеет предупреждение
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
и я хочу знать, есть ли более простой и чистый способ вызвать функцию bash напрямую, как это обычный двоичный файл без bash -ic
накрутка? Может быть, что-то вроде
RUN load_functions &&
nvm install 0.12 &&
nvm alias default 0.12 &&
nvm use 0.12
1 ответов
настройки по RUN
не запускает команду в оболочке. Вот почему функции оболочки и синтаксис оболочки (например,cmd1
&&cmd2
) не может использоваться из коробки. Вам нужно вызвать оболочку явно:
RUN bash -c 'nvm install 0.12 && nvm alias default 0.12 && nvm use 0.12'
если вы боитесь этой длинной командной строки, поместите эти команды в сценарий оболочки и вызовите скрипт с RUN
:
script.sh
#!/bin/bash
nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
и сделать его исполняемым:
chmod +x script.sh
В Dockerfile поставить:
RUN /path/to/script.sh