我有一个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
Run Code Online (Sandbox Code Playgroud)
错误是
Step 5 : RUN nvm install 0.12
---> Running in b639c2bf60c0
/bin/sh: nvm: command not found
Run Code Online (Sandbox Code Playgroud)
我设法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"
Run Code Online (Sandbox Code Playgroud)
上面的方法工作正常,但它有一个警告
bash: cannot set terminal process group (1): Inappropriate ioctl for device
bash: no job control in this shell
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种更简单,更简洁的方法来直接调用bash函数,因为它是普通的二进制文件而没有bash -ic包装?也许是这样的
RUN load_functions && \
nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
Run Code Online (Sandbox Code Playgroud)
Docker RUN不会在shell中启动命令.这就是为什么shell函数和shell语法(比如cmd1&& cmd2)无法开箱即用的原因.您需要显式调用shell:
RUN bash -c 'nvm install 0.12 && nvm alias default 0.12 && nvm use 0.12'
Run Code Online (Sandbox Code Playgroud)
如果您害怕那个长命令行,请将这些命令放入shell脚本并使用以下命令调用脚本RUN:
script.sh
#!/bin/bash
nvm install 0.12 && \
nvm alias default 0.12 && \
nvm use 0.12
Run Code Online (Sandbox Code Playgroud)
并使其可执行:
chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)
在Dockerfile中放:
RUN /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4263 次 |
| 最近记录: |