k0p*_*kus 5 node.js npm docker
我使用该映像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
Run Code Online (Sandbox Code Playgroud)
但运行时却失败
npm update -g
Run Code Online (Sandbox Code Playgroud)
陈述:
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'
Run Code Online (Sandbox Code Playgroud)
npm 上已经有一个开放的 github 问题,并且提供了使用该install.sh脚本的解决方法:
ADD https://www.npmjs.com/install.sh ./install.sh
RUN sh install.sh
Run Code Online (Sandbox Code Playgroud)
似乎下载了 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)
Run Code Online (Sandbox Code Playgroud)
有什么办法可以解决 npm 错误并将 npm 版本更新到 docker 镜像的更高版本?
这要么与运行顺序有关。我添加了更新脚本作为第一个命令:
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
Run Code Online (Sandbox Code Playgroud)
现在可以了。
它还可以在不使用缓存的情况下重建 docker 容器。docker build --no-cache,但它现在对我有用(我不知道为什么):
$ npm -v
4.0.3
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7085 次 |
| 最近记录: |