我在/root/.profile
中定义了一个bash函数nvm
。当我在RUN
步骤中调用它时,docker build
找不到该函数。
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
我成功地通过用bash -ic
将nvm
包装起来来调用它,这将加载/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
运行 bash -c 'nvm install 0.12 && nvm alias default 0.12 && nvm use 0.12'
应该可以解决问题。这对你有用吗?(我不太确定,因为我不了解你的容器的详细情况) - hek2mgl