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

作为一个解决scheme,不能通过npm链接正确处理本地依赖关系,我试图让Dockerfile将symlinked文件夹复制到node_modules文件夹中,如下所示:

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”未能build立: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文件夹。

从官方文件 :

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

换句话说,只有当前目录和下面的文件将被发送到“上下文”。 当前目录以外的任何内容(包括simlinks)都将被忽略!