首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Dockerfile中运行bash函数

如何在Dockerfile中运行bash函数
EN

Stack Overflow用户
提问于 2015-09-22 11:22:50
回答 1查看 10.7K关注 0票数 13

我在/root/.profile中定义了一个bash函数nvm。当我在RUN步骤中调用该函数时,docker build找不到它。

代码语言:javascript
复制
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

错误是

代码语言:javascript
复制
Step 5 : RUN nvm install 0.12
 ---> Running in b639c2bf60c0
/bin/sh: nvm: command not found

我设法调用了nvm,方法是用bash -ic包装它,它将加载/root/.profile

代码语言:javascript
复制
RUN bash -ic "nvm install 0.12" && \
    bash -ic "nvm alias default 0.12" && \
    bash -ic "nvm use 0.12"

上面的方法运行良好,但它有一个警告

代码语言:javascript
复制
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell

我想知道,有没有一种更简单、更干净的方法来直接调用bash函数,因为它是没有bash -ic包装的普通二进制函数?也许是像这样的

代码语言:javascript
复制
RUN load_functions && \
    nvm install 0.12 && \
    nvm alias default 0.12 && \
    nvm use 0.12
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-22 11:31:51

Docker的RUN不会在shell中启动该命令。这就是为什么外壳函数和外壳语法(如cmd1 && cmd2)不能开箱即用的原因。您需要显式调用shell:

代码语言:javascript
复制
RUN bash -c 'nvm install 0.12 && nvm alias default 0.12 && nvm use 0.12'

如果您害怕冗长命令行,请将这些命令放入shell脚本中,并使用RUN调用该脚本

script.sh

代码语言:javascript
复制
#!/bin/bash

nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12

并使其可执行:

代码语言:javascript
复制
chmod +x script.sh

在Dockerfile put中:

代码语言:javascript
复制
RUN /path/to/script.sh
票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32707839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档