我在/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我设法调用了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发布于 2015-09-22 11:31:51
Docker的RUN不会在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 put中:
RUN /path/to/script.shhttps://stackoverflow.com/questions/32707839
复制相似问题