如何在Dockerfile中运行bash函数

时间:2015-09-22 03:22:50

标签: bash docker

我在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

1 个答案:

答案 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