我有一个正在安装 nvm 的 Dockerfile。安装后,我需要使用 nvm 安装节点 5.11。问题是,安装 nvm 后,需要关闭终端并再次运行才能使 nvm 命令可用。
我的 docker 文件如下所示:
# 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 [email protected]
我得到的输出是:
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 中做到这一点?预先感谢。
每个新的 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
有命令可以做到这一点。
PATH="$PATH"
和 exec bash
exec bash
不起作用。请尝试另一个。您可以使用以下命令在 Dockerfile 中重新启动终端:
RUN bash -c "source ${HOME}/.bashrc"
将您的 Dockerfile 更新为
# Installing Node
SHELL ["/bin/bash", "--login", "-i", "-c"]
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh | bash
RUN source /root/.bashrc && nvm install 22
SHELL ["/bin/bash", "--login", "-c"]
或者您可以专门使用以下内容来获取 nvm:
RUN curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.0/install.sh
RUN . ~/.nvm/nvm.sh && nvm install 22
您应该使用已安装正确版本的node.js 的预构建节点映像。
当您已经将 Docker 映像作为与主机上可能安装的其他软件的隔离层时,您不需要像 nvm(rvm、virtualenv 等)这样的工具;您永远不会在单个映像中安装语言运行时的多个版本,而您可能需要在桌面或开发人员系统上安装。