当我尝试安装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'
答案 0 :(得分:1)
看起来npm使用mv来更新软件包文件,但是单独安装的文件不会让这种情况发生(只是在通用文件上尝试过,具有相同的症状)。
使用安装的文件夹和链接的解决方案对我有效,如下所述: Locked package.json files in Docker container using docker-compose
答案 1 :(得分:1)
我在尝试在 docker 容器内执行包的 npm 安装时遇到了同样的问题。我没有从 src 文件夹复制绑定/挂载单个文件,而是挂载/绑定了整个目录。对我有用的解决方案是:
node_modules
卷并绑定整个目录这是我的 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
也可以。
实际上,由于某种原因,使用纱线不再给我这个问题。