Как запустить функцию 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