【问题标题】:Docker + node_modules: receiving error for local dependency while trying to run DockerfileDocker + node_modules:在尝试运行 Dockerfile 时收到本地依赖错误
【发布时间】:2018-04-25 12:03:39
【问题描述】:

我正在为 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.

Dockerfile:

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 中的符号链接问题,还有一些文章概述了这个问题,但似乎没有一个能解决这个问题。我正在寻找此问题的解决方案或非常好的解决方法。

【问题讨论】:

    标签: docker docker-compose dockerfile node-modules


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 您是说我必须将所有项目文件夹复制到包含 docker-compose.yml 的父文件夹中并将上下文设置为此文件夹吗?
    • 它不必和docker-compose.yml在同一个目录,yaml只需要引用包含您需要访问的所有内容的目录作为context:
    • 您在Dockerfile 中获取的任何文件都需要考虑这个新的上下文。
    • 最后一件事,这是否意味着 dockerfile 将被视为相对于 docker-compose.yml 文件中设置的上下文?
    • COPYADD 的源参数与构建上下文相关。我认为它们是唯一直接引用上下文的命令。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多