如何在Dockerfile中运行bash函数

我在nvm定义了一个bash函数/root/.profile 。 当我在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

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
链接地址: http://www.djcxy.com/p/87999.html

上一篇: How to run bash function in Dockerfile

下一篇: Core: Why does Laravel store Aliases multiple times?