使用docker-compose在Docker容器中锁定package.json文件

sal*_*l17 6 node.js docker dockerfile package.json docker-compose

我正在使用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'
Run Code Online (Sandbox Code Playgroud)

简化的包结构是:

? docker/
    Dockerfile
  docker-compose.yaml
  package.json
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

泊坞窗,compose.yaml文件包含:

version: "3"

services:
  node:
    build:
      context: ./
      dockerfile: ./docker/Dockerfile
    volumes:
      - ./node_modules/:/Example/node_modules/
      - ./package.json:/Example/package.json
Run Code Online (Sandbox Code Playgroud)

的package.json文件包含:

{
  "name": "example",
  "version": "1.0.0",
  "description": "example",
  "license": "UNLICENSED"
}
Run Code Online (Sandbox Code Playgroud)

运行docker-compose run --entrypoint bash node以启动bash,然后npm install --save redux在容器内运行会产生有关package.json文件被锁定的警告,但是文件可以写入主机上的node_modules目录中.如何使用此结构避免对package.json文件进行锁定?

Tom*_*aey 2

我遇到了同样的问题,我通过安装package.json所在的文件夹而不是package.json本身解决了这个问题。

version: "3"

services:
  node:
    build:
      context: ./
      dockerfile: ./docker/Dockerfile
    volumes:
      - .:/Example
Run Code Online (Sandbox Code Playgroud)

直接将package.json作为卷挂载似乎会锁定该文件。

  • 此解决方案的问题是当前目录中的所有文件都安装在容器中(例如“.git”、“.env”等)。我希望避免安装所有内容,而是仅选择构建/运行容器所需的文件。 (6认同)
  • 您可以将源代码移动到 /src 子文件夹: **./src/package.json** 和 **./src/node_modules** 并使用 docker compose `- ./src:/Example` 挂载它 (2认同)