我正在使用Docker for Mac和Docker Compose来开发Node.js应用程序,我遇到了一个错误,因为package.json文件被锁定了。在正在运行的容器中运行npm install --save <package>
后的特定错误是:
npm WARN saveError EBUSY: resource busy or locked, rename
'/Example/package.json.1647356251' -> '/Example/package.json'
简化的包结构是:
▾ docker/
Dockerfile
docker-compose.yaml
package.json
Dockerfile包含:
FROM node:9.5
ENV SOURCE_CODE /Example
COPY package.json $SOURCE_CODE/package.json
RUN npm --prefix $SOURCE_CODE install $SOURCE_CODE
WORKDIR $SOURCE_CODE
docker-compose.yaml文件包含:
version: "3"
services:
node:
build:
context: ./
dockerfile: ./docker/Dockerfile
volumes:
- ./node_modules/:/Example/node_modules/
- ./package.json:/Example/package.json
package.json文件包含:
{
"name": "example",
"version": "1.0.0",
"description": "example",
"license": "UNLICENSED"
}
运行docker-compose run --entrypoint bash node
以启动bash,然后在容器内运行npm install --save redux
会产生有关package.json文件被锁定的警告,但是文件可以写在主机上的node_modules目录中。如何使用此结构避免对package.json文件进行锁定?
我遇到了同样的问题,我通过挂载package.json所在的文件夹而不是package.json本身来解决这个问题。
version: "3"
services:
node:
build:
context: ./
dockerfile: ./docker/Dockerfile
volumes:
- .:/Example
直接将package.json挂载为卷似乎会锁定该文件。