2016-12-06 3 views
3

Я использую изображение node:6.9, и я пытаюсь обновить версию npm от v3 до v4.Как обновить npm внутри контейнера докера?

Мои Dockerfile выглядит следующим образом:

FROM node:6.9 
MAINTAINER Philipp Kretzschmar <[email protected]> 
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 [email protected] -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' 

Там в open github issue на НПМ уже, и обходной путь предоставляется для использования сценария install.sh:

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

, который, кажется, чтобы загрузить НПЙ 4.0.3 и и установить его, но теперь НПЙ не может быть запущен из внутри контейнера с указанием:

$ 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) 

Какого обходным путем, что НАЯ ошибкой и обновления и НУЮ версию более поздняя версия для изображения докеров?

+0

Связанный: https://stackoverflow.com/questions/44269086/how-to-upgrade-npm-to-npm5- на-последних-узел-докер-изображения – k0pernikus

ответ

0

Это либо имело отношение к текущему порядку. Я добавил скрипт обновления в качестве одной из первых команд:

FROM node:6.9 
MAINTAINER Philipp Kretzschmar <[email protected]> 
ENV TERM xterm-color 
ARG DEBIAN_FRONTEND=noninteractive 
ADD https://www.npmjs.com/install.sh ./install.sh 
RUN sh install.sh 

и теперь он работает.

Он также мог бы сделать с восстановлением контейнера докера без использования кеша. docker build --no-cache, но теперь он работает для меня (и я не знаю, почему):

$ npm -v 
4.0.3 
Смежные вопросы