Попытка обновить NPM в Docker: code EISDIR

#node.js #docker #npm #build

#node.js #docker #npm #сборка

Вопрос:

Я пытаюсь обновить NPM с ["npm","install","-g","npm"] помощью, но он говорит:

 Step 4/12 : RUN ["npm", "install", "-g", "npm"]
 ---> Running in 708a95e71771
npm ERR! code EISDIR
npm ERR! syscall copyfile
npm ERR! path /usr/local/lib/node_modules/npm
npm ERR! dest /usr/local/lib/node_modules/.npm-i9nnxROI
npm ERR! errno -21
npm ERR! EISDIR: illegal operation on a directory, copyfile '/usr/local/lib/node_modules/npm' -> '/usr/local/lib/node_modules/.npm-i9nnxROI'

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-12-31T13_38_29_907Z-debug.log
The command 'npm install -g npm' returned a non-zero code: 235

 

Мой dockerfile:

 FROM node

WORKDIR /root

COPY package*.json ./
RUN ["npm", "install", "-g", "npm"]
RUN ["npm", "audit", "fix"]
RUN ["npm", "install"]

COPY ./*.js ./
COPY static ./static
COPY views ./views

COPY conf.d/* /etc/dashboard/

EXPOSE 80

CMD ["node", "index.js"]
 

Похоже, что /usr/local/lib/node_modules/.npm-i9nnxROI или /usr/local/lib/node_modules/npm — это каталог, а не файл, но я думаю, что это должен быть каталог.

В моей системе (Linux 5.10.2-2-MANJARO # 1 SMP ВЫТЕСНЯЕТ x86_64 GNU / Linux) это работает, но на моем сервере (Linux 5.4.0-58-generic # 64-Ubuntu SMP x86_64 x86_64 x86_64 GNU / Linux) этого не происходит.

Комментарии:

1. npm должен быть каталогом, в котором находится copypart, куда вы копируете его со своего компьютера в свой контейнер?

2. Я не копирую его. npm -g install npm пытается скопировать что-то внутри контейнера.

Ответ №1:

 From node
 

устанавливает последний узел, который имеет npm версии 7 . Его нестабильность имеет некоторые проблемы

использовать

 FROM node:lts