【问题标题】:Dockerfile issue: cannot copy folder from source(host) to destination(container) folderDockerfile 问题:无法将文件夹从源(主机)复制到目标(容器)文件夹
【发布时间】:2018-04-24 02:33:14
【问题描述】:

作为无法通过 npm 链接正确处理本地依赖项的一种解决方法,我试图让 Dockerfile 在我运行 npm install 后将符号链接文件夹复制到 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”构建失败:复制失败: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 文件夹。

【问题讨论】:

  • node_modules 文件夹在哪里?它是否包含在 docker build 命令末尾的构建上下文中?
  • 是的。它与项目、Dockerfile 和 node_modules 位于同一文件夹中。
  • 您好 user1790300。一个小问题:我已经编辑了您的一些问题以删除闲聊材料,包括您是否感谢帮助(假设)以及您被困多长时间(无关紧要)。请您在以后的帖子中避免使用此类材料吗?
  • “没有这样的文件或目录”非常明确!你说它在同一个文件夹中——它可能是一个软链接吗?
  • @SiKing 我使用 npm link 命令创建它。

标签: node.js docker docker-compose dockerfile


【解决方案1】:

来自official documentation

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

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

【讨论】:

  • 话虽如此,这种情况的解决方法是什么?我有与 npm 链接的本地依赖项,以避免每次更改模块时都必须进行全新安装。
  • @user1790300 如果 npm 支持,您必须创建一个硬链接。或者一个准备 Docker 需要使用的所有文件的暂存区。
猜你喜欢
  • 2021-05-24
  • 2017-03-31
  • 2021-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
相关资源
最近更新 更多