【发布时间】:2018-08-04 05:54:00
【问题描述】:
我正在使用 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 文件?
【问题讨论】:
-
更高版本的node(16+)好像没有这个问题
标签: node.js docker docker-compose dockerfile package.json