热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

如何在Dockerfile中安装nvm?

如何解决《如何在Dockerfile中安装nvm?》经验,为你挑选了1个好方法。

我正在尝试在Dockerfile中安装nvm。似乎安装成功,但是nvm命令不起作用。

Dockerfile:

# Install nvm
RUN git clone http://github.com/creationix/nvm.git /root/.nvm;
RUN chmod -R 777 /root/.nvm/;
RUN sh /root/.nvm/install.sh;
RUN export NVM_DIR="$HOME/.nvm";
RUN echo "[[ -s $HOME/.nvm/nvm.sh ]] && . $HOME/.nvm/nvm.sh" >> $HOME/.bashrc;
RUN nvm ls-remote;

构建输出:

Step 23/39 : RUN git clone http://github.com/creationix/nvm.git /root/.nvm;
 ---> Running in ca485a68b9aa
Cloning into '/root/.nvm'...
 ---> a6f61d486443
Removing intermediate container ca485a68b9aa
Step 24/39 : RUN chmod -R 777 /root/.nvm/
 ---> Running in 6d4432926745
 ---> 30e7efc5bd41
Removing intermediate container 6d4432926745
Step 25/39 : RUN sh /root/.nvm/install.sh;
 ---> Running in 79b517430285
=> Downloading nvm from git to '$HOME/.nvm'
=> Cloning into '$HOME/.nvm'...
* (HEAD detached at v0.33.0)
  master
=> Compressing and cleaning up git repository

=> Appending nvm source string to /root/.profile
=> bash_completion source string already in /root/.profile
npm info it worked if it ends with ok
npm info using npm@3.10.10
npm info using node@v6.9.5
npm info ok
=> Installing Node.js version 6.9.5
Downloading and installing node v6.9.5...
Downloading https://nodejs.org/dist/v6.9.5/node-v6.9.5-linux-x64.tar.xz...
######################################################################## 100.0%
Computing checksum with sha256sum
Checksums matched!
Now using node v6.9.5 (npm v3.10.10)
Creating default alias: default -> 6.9.5 (-> v6.9.5 *)
/root/.nvm/install.sh: 136: [: v6.9.5: unexpected operator
Failed to install Node.js 6.9.5
=> Close and reopen your terminal to start using nvm or run the following to use it now:

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
 ---> 9f6f3e74cd19
Removing intermediate container 79b517430285
Step 26/39 : RUN export NVM_DIR="$HOME/.nvm";
 ---> Running in 1d768138e3d5
 ---> 8039dfb4311c
Removing intermediate container 1d768138e3d5
Step 27/39 : RUN echo "[[ -s $HOME/.nvm/nvm.sh ]] && . $HOME/.nvm/nvm.sh" >> $HOME/.bashrc;
 ---> Running in d91126b7de62
 ---> 52313e09866e
Removing intermediate container d91126b7de62
Step 28/39 : RUN nvm ls-remote;
 ---> Running in f13c1ed42b3a
/bin/sh: 1: nvm: not found
The command '/bin/sh -c nvm ls-remote;' returned a non-zero code: 127

错误:

Step 28/39 : RUN nvm ls-remote;
 ---> Running in f13c1ed42b3a
/bin/sh: 1: nvm: not found
The command '/bin/sh -c nvm ls-remote;' returned a non-zero code: 127

我的/root/.bashrc文件的末尾看起来像:

[[ -s /root/.nvm/nvm.sh ]] && . /root/.nvm/nvm.sh

Dockerfile中的其他所有东西都可以正常工作。添加nvm东西是使它崩溃的原因。 这是完整的文件。



1> Nehal J Wani..:

我对您的Dockerfile进行了以下更改以使其工作:

首先,更换...

RUN sh /root/.nvm/install.sh;

...具有:

RUN bash /root/.nvm/install.sh;

为什么?在基于Redhat的系统上,/bin/sh是的符号链接/bin/bash。但在Ubuntu的,/bin/sh是一个符号链接/bin/dash。这就是dash

root@52d54205a137:/# bash -c '[ 1 == 1 ] && echo yes!'
yes!
root@52d54205a137:/# dash -c '[ 1 == 1 ] && echo yes!'
dash: 1: [: 1: unexpected operator

其次,更换...

RUN nvm ls-remote;

...具有:

RUN bash -i -c 'nvm ls-remote';

为什么?因为,Ubuntu(几乎在顶部)中用户的默认.bashrc包含:

# If not running interactively, don't do anything
[ -z "$PS1" ] && return

nvm脚本的源代码发生在底部。因此,我们需要通过传递参数来确保以交互方式调用bash -i

第三,您可以在Dockerfile中跳过以下几行:

RUN export NVM_DIR="$HOME/.nvm";
RUN echo "[[ -s $HOME/.nvm/nvm.sh ]] && . $HOME/.nvm/nvm.sh" >> $HOME/.bashrc;

为什么?因为bash /root/.nvm/install.sh;它将自动为您完成:

[fedora@myhost ~]$ sudo docker run --rm -it 2a283d6e2173 tail -2 /root/.bashrc
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm


推荐阅读
  • HelloDocker官方安装教程:https:docs.docker.cominstalllinuxdocker-ceubuntu进去选好对应系统发行版,照着命令复制-粘贴-运行 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • 在Docker中,构建一个自定义镜像共有两种方法,一是通过commit指令构建,二是通过Dockerfile文件构建。第一种方式在上篇博客中已经详细介绍(Docker入门实战(二)—— ... [详细]
  • 如何解决《将用户添加到Docker容器》经验,为你挑选了4个好方法。 ... [详细]
  • 2016 linux发行版排行_灵越7590 安装 linux (manjarognome)
    RT之前做了一次灵越7590黑苹果炒作业的文章,希望能够分享给更多不想折腾的人。kawauso:教你如何给灵越7590黑苹果抄作业​zhuanlan.z ... [详细]
  • 本文探讨了容器技术在安全方面面临的挑战,并提出了相应的解决方案。多租户保护、用户访问控制、中毒的镜像、验证和加密、容器守护以及容器监控都是容器技术中需要关注的安全问题。通过在虚拟机中运行容器、限制特权升级、使用受信任的镜像库、进行验证和加密、限制容器守护进程的访问以及监控容器栈,可以提高容器技术的安全性。未来,随着容器技术的发展,还需解决诸如硬件支持、软件定义基础设施集成等挑战。 ... [详细]
  • systemd-nspawn可以创建最轻量级的容器(ns的意思就是namespace),本文的实验平台是Ubuntu16.04,x86_64机器。本文的目的是:在Ubuntu中用syst ... [详细]
  • docker安装到基本使用
    记录docker概念,安装及入门日常使用Docker安装查看官方文档,在"Debian上安装Docker",其他平台在"这里查 ... [详细]
  • DockerfileDocker是软件工业上的集装箱技术。通过以下文件制作Docker镜像[root@Optimusdocker-training]#cdcentos7[root@ ... [详细]
  • 我是docker的新手,正在学习 ... [详细]
  • 1、官方下载jdk8地址:https:www.oracle.comjavatechnologiesjavasejavase-jdk8-downloads.html下载的版本:jdk ... [详细]
  • 注:该文作者jpetazzo,该文章的原文为MultipleDockercontainersloggingtoasinglesyslog这里有一个简单方法展示了怎样在一个容器中运行 ... [详细]
  • 如何解决《用于tomcat的Dockerfile》经验,为你挑选了2个好方法。 ... [详细]
  • 如何解决《Dockerfile中未调用RUN命令》经验,为你挑选了1个好方法。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
author-avatar
lx比比2502869217
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有