当前位置: 首页 > 知识库问答 >
问题:

如何在Dockerfile中运行bash函数

谯嘉懿
2023-03-14
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
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

共有1个答案

封烈
2023-03-14

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
RUN /path/to/script.sh
 类似资料:
  • 问题内容: 我们如何使用linux bash运行php脚本? php文件test.php test.php包含。 问题答案: 在命令行中输入以下内容: 确保filename.php既包含并执行您要测试的功能。您回显的所有内容都会显示在控制台中,包括错误。 请注意,Apache PHP的php.ini通常不同于CLI PHP(命令行界面)。 参考:https : //secure.php.net/m

  • 问题内容: 我正在尝试在Dockerfile的构建过程中运行脚本。但这似乎不起作用。 我尝试过这种方式: 也这样: 并且也执行我正在运行的容器: 似乎没有任何作用。 你知道怎么做吗? 问题答案: 和是执行脚本的两种不同方式。 意味着它将创建一个中间容器,运行脚本并将该容器的新状态冻结在新的中间映像中。此后该脚本将不再运行:您的最终图像应该反映出该脚本的结果。 表示您的映像(尚未执行脚本)将创建一个

  • 问题内容: 我正在尝试对laravel应用程序进行Docker化。该应用程序已经构建并且在git中,但是我.gitignore我的供应商文件夹。我添加了一个Dockerfile,如下所示: 当我构建时,这似乎很棒。我看到依赖项已下载,我看到输出中正在生成自动加载文件。但是,一旦构建完成,vendor文件夹实际上就不存在了。我猜这都是在中间容器中完成的,然后将其删除?所以当我运行docker- co

  • 我试图,我收到了这个错误 /bin/sh:1:sudo:未找到 这就是我的的样子: 当我尝试构建它时,会出现此错误<代码>docker构建-t jenkins

  • 我正在写一个DockerFile。有没有办法在这个文件中进行注释?

  • 问题内容: 我是Docker的新手。我发现我们可以使用Dockerfile中的ENV指令设置环境变量。但是,如何在Dockerfile中为长命令设置bash别名? 问题答案: 基本上就像您经常做的那样,将其添加到用户的: 和往常一样,这仅适用于交互式外壳: 对于非交互式外壳,您应该创建一个小脚本并将其放在路径中,即: 如果您的别名使用参数(即-> ),则只需添加: