Docker + node_modules:尝试 运行 Docker 文件时收到本地依赖错误

Docker + node_modules: receiving error for local dependency while trying to run Dockerfile

我正在为 node.js 微服务创建一个 docker 容器,并且正在 运行 遇到另一个文件夹的本地依赖项问题。

我使用

将依赖项添加到 node_modules 文件夹
npm install -S ../dependency1(module name).  

这还在 package.json 中添加了一个条目,如下所示:

"dependency1": "file:../dependency1".

当我 运行 执行 docker-compose up -d 命令时,我收到一条错误消息,指出以下内容:

npm ERR! Could not install from "../dependency1" as it does not contain a package.json file.

Docker 文件:

FROM node:latest

RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
COPY . /usr/src/app
RUN npm install 

CMD [ "npm", "start" ]
EXPOSE 3000

docker-compose.yml:

customer:
    container_name: "app_customer"
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - .:/usr/src/app/
      - /usr/src/app/node_modules
    ports:
      - "3000:3000"
    depends_on:
      - mongo
      - rabbitmq

我发现文章概述了 node_modules 文件夹和 docker 中符号链接的问题,还有一些文章概述了这个问题,但 none 似乎提供了解决这个问题的方法。我正在寻找解决此问题的方法或非常好的解决方法。

A Docker 构建不能引用构建上下文之外的文件,即 docker-compose.yml 文件中定义的 .

docker build 在构建上下文中创建一个包含所有文件的 tar 包,并将其发送到 Docker 守护进程以进行构建。构建中不存在上下文目录之外的任何内容。

您可以将带有 context: ../ 的构建上下文移动到父目录,并随机排列您在 Dockerfile 中引用的所有路径以匹配。请注意不要使构建上下文变大,因为它会减慢构建过程。

另一种选择是将私有 npm 模块发布到 scope,可能在您和构建服务器可以访问并正常安装依赖项的私有 npm 注册表上。