代码之家  ›  专栏  ›  技术社区  ›  user1790300

Docker+node_模块:尝试运行Dockerfile时接收到本地依存关系错误

  •  1
  • user1790300  · 技术社区  · 7 年前

    我正在为节点创建docker容器。js microservice和我在另一个文件夹中遇到了本地依赖性问题。

    我将依赖项添加到 node_modules 文件夹使用:

    npm install -S ../dependency1(module name).  
    

    这也在包中添加了一个条目。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撰写。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 回复  |  直到 7 年前
        1
  •  1
  •   Matt slashingweapon    7 年前

    Docker生成不能引用生成上下文之外的文件,这是 . 定义于 docker-compose.yml 文件

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

    您可以使用 context: ../ 到父目录,并洗牌您在中引用的所有路径 Dockerfile 匹配。只是要小心不要使构建上下文过大,因为它会减慢构建过程。

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