Dockerfile问题:无法将文件夹从源(主机)复制到目标(容器)文件夹

时间:2017-11-10 19:34:33

标签: node.js docker docker-compose dockerfile

作为一种无法通过npm链接正确处理本地依赖关系的解决方法,我试图让Dockerfile将符号链接文件夹复制到node_modules文件夹后运行npm install,如下所示:

FROM node:latest

ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /usr/src/app && cp -a /tmp/node_modules /usr/src/app && cp -a /tmp/package-lock.json /usr/src/app && cp -a /tmp/package.json /usr/src/app

COPY node_modules/modlib1 /usr/src/app/node_modules/mongodb-repository
COPY node_modules/modlib2 /usr/src/app/node_modules/redis-repository

每次Dockerfile执行复制行时,都会收到以下错误:

  

错误:服务'container1'无法构建:COPY失败:stat /var/lib/docker/tmp/docker-builder831774561/.npm-global/lib/node_modules/modlib1:没有此类文件或目录

以下是此服务的docker-compose.yml部分示例:

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

我尝试过COPY,ADD等。我甚至在.dockerignore文件中注释了与node_modules有关的部分。

什么可能阻止这些复制操作?我只想将本地依赖项复制到node_modules文件夹。

1 个答案:

答案 0 :(得分:0)

来自official documentation

  

路径必须位于构建的上下文中;你不能COPY ../something / something,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。

换句话说,只有当前目录及以下的文件才会被发送到" context"。当前目录之外的任何内容,包括simlinks,都将被忽略!

相关问题