我在nvm
中定义了一个bash函数/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 -ic
我想知道是否有一种更简单,更简洁的方法可以直接调用bash函数,因为它是普通的二进制文件而没有RUN load_functions && \
nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
包装?也许像是
git ls-remote --heads origin
答案 0 :(得分:5)
Docker' RUN
没有在shell中启动命令。这就是为什么shell函数和shell语法(如cmd1
& cmd2
)无法开箱即用的原因。您需要明确调用shell:
RUN bash -c 'nvm install 0.12 && nvm alias default 0.12 && nvm use 0.12'
如果您害怕那么长的命令行,请将这些命令放入shell脚本并使用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