【发布时间】:2019-09-27 17:08:51
【问题描述】:
我正在尝试准备一个 docker 映像以加快构建过程并避免在每次构建时安装各种工具和库,我的基础映像将包含它,然后我会将它与我需要的所有已安装的东西一起使用。
所以问题是我正在尝试从 NVM(节点版本管理器)安装节点,但安装后我无法使用 nvm 和 npm 命令。
我的基础镜像是 golang:1.13.1,我做了以下事情。
RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.34.0/install.sh | bash
然后在教程中,我看到必须运行~/.nvm/nvm.sh 才能完成如下所示的工作
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm
我对其进行了一些更改,因为我的 docker 映像由于 shell 不同而无法识别少数命令。
但是当我做两个单独的RUN 时,第二个看不到NVM_DIR 了。当然,我可以在一个RUN 中完成所有操作,但我需要稍后拥有npm,所以每个RUN 应该都能看到这个命令。
另外,我尝试导出NVM_DIR,但即使我使用. ~/.bashrc 重新启动它仍然无法正常工作。
拥有 NVM 的重点是我不想关心节点版本。每个版本都是 LTS 版本,这对我来说没问题。
欢迎分享您的解决方案或建议。提前致谢
【问题讨论】:
-
您需要
nvm还是直接安装node的解决方案对您有帮助?为什么不使用go-apline图像 -
由于
nvm install --lts | nvm use --lts,nvm 对我来说更好。我使用其他命令安装了 node 和 npm,但它不太方便,因为必须提供版本。越自动化越好。 -
如果是 Docker,你不需要节点版本管理器 (NVM) 来管理版本,每个 docker 映像代表一个版本,那么为什么还要在 Docker 中安装
NVM呢?使用golang:1.13.1-alpine3.10然后只需安装节点apk add --no-cache node或指定您想要的任何版本。这也安装lts -
@Adiii 我使用 golang 图像提供的 apt-get 安装的更多东西。但是使用alpine我只有apk,所以我不方便重写所有下载的东西