Docker构建失败:执行apt-get install npm返回非零代码1,无法安装forever
解决Docker构建时
apt-get install npm失败的问题 我一眼就发现了问题的核心——你在Dockerfile里执行apt-get install npm的时候没加-y参数!
为什么会失败?
Docker的构建环境是非交互式的,当apt-get需要确认是否要安装依赖包时,它没办法像你在本地Ubuntu终端那样收到你的手动确认(比如输入y),所以会直接退出并返回非零错误码1。而你在本地执行时是交互式环境,自然能顺利完成安装。
快速修复方案
把Dockerfile里的第三个RUN命令加上-y参数,让apt-get自动确认所有安装操作:
FROM ubuntu:14.04 RUN apt-get update && apt-get install -y software-properties-common RUN apt-get install -y nodejs RUN apt-get install -y npm # 这里加上-y参数 RUN npm install forever -g
更优的Dockerfile写法
另外,在Docker里最好把相关的apt命令合并到同一个RUN中,这样可以减少镜像层数,还能避免因为层缓存导致的源过期问题。同时清理apt缓存可以大幅减小镜像体积:
FROM ubuntu:14.04 RUN apt-get update && apt-get install -y \ software-properties-common \ nodejs \ npm && \ rm -rf /var/lib/apt/lists/* # 清理apt缓存,减小镜像体积 RUN npm install forever -g
进阶优化:避免老旧版本问题
Ubuntu 14.04官方源里的nodejs和npm版本都比较老旧,后续可能遇到兼容性问题。如果想使用更新的版本,可以通过NodeSource的PPA来安装:
FROM ubuntu:14.04 RUN apt-get update && apt-get install -y \ software-properties-common \ curl && \ # 添加NodeSource的PPA(这里选的是适配Ubuntu 14.04的Node.js 6.x) curl -sL https://deb.nodesource.com/setup_6.x | bash - && \ apt-get install -y nodejs && \ rm -rf /var/lib/apt/lists/* # NodeSource的nodejs包已经包含了npm,无需单独安装 RUN npm install forever -g
内容的提问来源于stack exchange,提问作者CRISTINA MOLINA
相关产品推荐
相关产品推荐

