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

时间:2017-11-12 20:29:55

标签: docker docker-compose dockerfile node-modules

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

搬运工-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中的符号链接问题以及一些概述此问题,但似乎没有提供此问题的解决方案。我正在寻找这个问题的解决方案或一个非常好的解决方法。

1 个答案:

答案 0 :(得分:1)

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

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

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

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