重新启动终端并使用Dockerfile运行命令

15

我有一个 Dockerfile,在其中安装了 nvm。安装完成后,我需要使用 nvm 安装 Node 5.11。问题是,安装完 nvm 后,终端需要关闭并重新运行,才能使用 nvm 命令。

我的 Dockerfile 如下:

# Installing Node
RUN Y | curl https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash
# RUN bash --login
RUN exec bash
RUN nvm install 5.11.0

# Installing Project dependencies
RUN npm install yarn -g
RUN npm install -g webpack@1.13.2

我得到的输出是:

Step 5/9 : RUN exec bash
 ---> Using cache
 ---> cfcdc4c98714
Step 6/9 : RUN nvm install 5.11.0
 ---> Running in 1874de4a7715
/bin/sh: 1: nvm: not found
The command '/bin/sh -c nvm install 5.11.0' returned a non-zero code: 127

在真正的Linux系统中,运行https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash后,在关闭并重新打开终端后,nvm命令将可用。我该如何在Dockerfile中实现这一点?提前致谢。


10
еңЁжӮЁзҡ„Dockerfileдёӯж·»еҠ SHELL ["bash", "-lc"]пјҢиҝҷж ·е°ұеҸҜд»ҘдёәжӮЁе®ҢжҲҗе·ҘдҪңгҖӮ - Tarun Lalwani
它确实有反应,但是npm install命令给了我以下内容:第7/9步:运行npm install yarn -g --->正在运行21bd1e67bb99 stdin: 不是tty bash: npm: 找不到命令 命令'bash -lc npm install yarn -g'返回了非零代码:127我现在在post中添加了新的npm install命令。 - Yeasin Hossain
你能更新完整的构建日志吗? - Tarun Lalwani
@YeasinHossain 我也遇到了同样的问题!在添加 SHELL ["bash", "-lc"] 后输出相同。 - Yan Yang
1
唯一的区别是我正在安装 anaconda - Yan Yang
4个回答

2

有命令可以完成此操作。
PATH="$PATH"exec bash
因此,您可以在dockerfile中添加这些命令。
如果 exec bash 无效,请尝试另一个命令。
这对我有效!


2
每次执行新的RUN命令都会在docker镜像中创建一个新的层,因此您可以将其视为每个"RUN"生成新的终端。

问题是什么:当以以下方式运行命令时:通过bash管道传输它 curl https://raw.githubusercontent.com/creationix/nvm/v0.30.2/install.sh | bash 如果某些内容失败,则不会抛出任何错误。

几周前遇到了类似的问题。 您的基础映像是否具有所有依赖项? 根据基础映像,在从github运行脚本之前添加一个RUN任务,该任务将下载curl wget ca-certificates。 您可以查找其他人如何在其映像上安装nvm:https://github.com/mikeyfarrow/docker-nvm/blob/master/Dockerfile


0
您可以在 Dockerfile 中使用以下命令来重新启动终端:
RUN bash -c "source ${HOME}/.bashrc" 

-2
你应该使用已安装正确版本node.js的预构建节点镜像
当您已经有Docker映像作为与可能安装在主机上的其他软件隔离层时,您不需要像nvm(rvm,virtualenv等)这样的工具;您永远不会在单个映像中安装多个语言运行时的版本,在桌面或开发系统上可能需要这样做。

你可能正在使用一个基础镜像作为后端堆栈,但也需要安装特定的Node版本。 - Diego Allen
3
这并不回答问题。如果用户想在他们的Docker镜像中安装Node,而不是使用node镜像,则无关紧要。 - sknight

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接