作为一种无法通过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文件夹。
答案 0 :(得分:0)
路径必须位于构建的上下文中;你不能COPY ../something / something,因为docker build的第一步是将上下文目录(和子目录)发送到docker守护进程。
换句话说,只有当前目录及以下的文件才会被发送到" context"。当前目录之外的任何内容,包括simlinks,都将被忽略!