【问题标题】:How to upgrade npm inside a docker container?如何在 docker 容器中升级 npm?
【发布时间】:2017-04-21 04:28:49
【问题描述】:

我使用图像node:6.9 并尝试将npm 的版本从v3 更新到v4。

我的 Dockerfile 看起来像:

FROM node:6.9
MAINTAINER Philipp Kretzschmar <philipp.kretzschmar@gmail.com>
ENV TERM xterm-color
ARG DEBIAN_FRONTEND=noninteractive
COPY docker/.docker-bashrc /root/.bashrc
RUN apt-get -qq update > /dev/null && \
    apt-get upgrade -qq > /dev/null && \
    apt-get install -qq rsync silversearcher-ag jq httpie vim s3cmd > /dev/null && \
    apt-get autoclean -qq
RUN npm update -g # this should upgrade npm!
RUN npm install typescript@2 -g --quiet > /dev/null

运行时却失败了

npm update -g

陈述:

npm ERR! Linux 4.4.0-51-generic
npm ERR! argv "/usr/local/bin/node" "/usr/local/bin/npm" "update" "npm" "-g"
npm ERR! node v6.9.1
npm ERR! npm  v3.10.8
npm ERR! path /usr/local/lib/node_modules/npm/node_modules/asap
npm ERR! code EXDEV
npm ERR! errno -18
npm ERR! syscall rename

npm ERR! EXDEV: cross-device link not permitted, rename '/usr/local/lib/node_modules/npm/node_modules/asap' -> '/usr/local/lib/node_modules/npm/node_modules/.asap.DELETE'

npm 上已经有一个open github issue,并且提供了使用install.sh 脚​​本的解决方法:

ADD https://www.npmjs.com/install.sh ./install.sh
RUN sh install.sh

这似乎下载了 npm 4.0.3 并安装它,但现在 npm 无法从容器内启动:

$ npm
module.js:471
    throw err;
    ^

Error: Cannot find module 'npmlog'
    at Function.Module._resolveFilename (module.js:469:15)
    at Function.Module._load (module.js:417:25)
    at Module.require (module.js:497:17)
    at require (internal/module.js:20:19)
    at /usr/local/lib/node_modules/npm/bin/npm-cli.js:19:13
    at Object.<anonymous> (/usr/local/lib/node_modules/npm/bin/npm-cli.js:75:3)
    at Module._compile (module.js:570:32)
    at Object.Module._extensions..js (module.js:579:10)
    at Module.load (module.js:487:32)
    at tryModuleLoad (module.js:446:12)

该 npm 错误以及将 npm 版本更新为 docker 映像的更高版本的解决方法是什么?

【问题讨论】:

标签: node.js docker npm


【解决方案1】:

这要么与运行顺序有关。我将更新脚本添加为第一个命令之一:

FROM node:6.9
MAINTAINER Philipp Kretzschmar <philipp.kretzschmar@gmail.com>
ENV TERM xterm-color
ARG DEBIAN_FRONTEND=noninteractive
ADD https://www.npmjs.com/install.sh ./install.sh
RUN sh install.sh

它现在可以工作了。

它也可以在不使用缓存的情况下重建 docker-container。 docker build --no-cache,但它现在对我有用(我不知道为什么):

$ npm -v
4.0.3

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-06-17
    • 2014-12-31
    • 2021-09-19
    • 1970-01-01
    • 2020-05-21
    • 1970-01-01
    相关资源
    最近更新 更多