繁忙:尝试执行npm安装时,资源繁忙或已在Docker中锁定

时间:2019-03-21 07:46:50

标签: node.js docker

当我尝试安装npm软件包时,我一直收到此错误。

docker-compose.yml中的音量设置如下:

volumes:
  - "./backend/packages/package.json:/home/node/package.json:delegated"
  - "./backend/packages/package-lock.json:/home/node/package-lock.json:delegated"
  - "./backend/:/home/node/app/"
  - /home/node/node_modules/

我想从容器内部运行安装程序,它不断为我提供以下内容:

npm WARN saveError EBUSY: resource busy or locked, rename '/home/node/package.json.2756152664' -> '/home/node/package.json'
npm WARN saveError EBUSY: resource busy or locked, rename '/home/node/package-lock.json.2814803686' -> '/home/node/package-lock.json'

3 个答案:

答案 0 :(得分:1)

看起来npm使用mv来更新软件包文件,但是单独安装的文件不会让这种情况发生(只是在通用文件上尝试过,具有相同的症状)。

使用安装的文件夹和链接的解决方案对我有效,如下所述: Locked package.json files in Docker container using docker-compose

答案 1 :(得分:1)

我在尝试在 docker 容器内执行包的 npm 安装时遇到了同样的问题。我没有从 src 文件夹复制绑定/挂载单个文件,而是挂载/绑定了整个目录。对我有用的解决方案是:

  1. 保留 node_modules 卷并绑定整个目录
  2. 清除缓存
  3. 通过 docker 安装。

这是我的 docker-compose 视图:

version: '3.1'
services:
  windaid:
  image: windaid
  build: ../WindAid-Website
  ports:
   - "3001:8000"
  volumes:
   - /myapp/node_modules #Persist after npm install from Dockerfile
   - ../WindAid-Website:/myapp #Binding entire directory

environment:
  - NODE_ENV=development
  - GATSBY_WEBPACK_PUBLICPATH=/

这是我的 Dockerfile 的视图:

FROM node:12.14.0-slim
RUN apt update && apt upgrade -y && \
    apt install gcc g++ make python git libc6-dev build-essential libpng-dev \
    libjpeg-dev libvips-dev libvips musl-dev node-gyp pngquant webp -y
 RUN yarn global add gatsby-cli
# The port gatsby runs on
EXPOSE 8000
WORKDIR /myapp
COPY ./package.json /myapp
COPY ./yarn.lock /myapp
RUN yarn install && yarn cache clean
RUN npm cache clean --force
CMD ["gatsby", "develop", "-H", "0.0.0.0" ]

答案 2 :(得分:0)

由于某些原因,即使我使用的是Mac,删除:delegated也可以。

实际上,由于某种原因,使用纱线不再给我这个问题。