为什么我不能将目录复制到我的 docker 容器?

why I can't copy directory to my docker container?

我有自己的目录结构:

+projects
    +project_1
    +project_2

+node
    +container_1
        -Dockerfile

在我的 Dockerfile 中,我将 project_1 复制到 /var/www/project_1 目录,但不幸的是它没有被复制:

#Dockerfile

FROM node:17
WORKDIR /var/www/project_1
COPY ../../projects/project_1 /var/www/project_1
RUN npm install
CMD ["npm","run","start:dev"]

错误:

 => ERROR [3/4] COPY ../../projects/project_1 /var/www/project_1                                                                                                                                                                                                               0.0s
------
 > [3/4] COPY ../../projects/project_1 /var/www/project_1:
------
failed to solve: rpc error: code = Unknown desc = failed to compute cache key: "/projects/project_1" not found: not found

编译期间使用外部files/folders

你不能这样做 因为 docker 创作者希望那样做,作为创作者,他们有充分的理由:简单性和/或安全性。

Docker 在构建时,将只处理与 Docker 文件位于同一文件夹中的文件或文件夹。

有一些解决方法,例如从一个文件夹启动 docker build... 并指定另一个文件夹中 Docker 文件的位置。

检查这些答案以获取更多详细信息:

不要使用外部 files/folders

在构建时,您不应依赖外部文件夹或文件。您必须只需要一个包含一个应用程序源代码的 git 存储库。这是常见的、广泛使用的并且与 devops 兼容。

构建时所需的任何其他依赖项,应由良好的工程设计:

  • 图书馆:在你的例子中是一个nodejs/npm包public or private
  • docker 基本图像:您可以使用必需的 files/folder 创建另一个图像,并使用它继承 FROM acme-base-nodejs 或 docker multi-stage

您要复制的文件应位于 Dockerfile 目录内,而不是外部(例如父目录)。

+projects
    +project_1
    +project_2

+node
    +container_1
+Dockerfile  # <-- move your Dockerfile to your project root.

更新您在 Dockerfile 中的文件位置:

...
COPY ./projects/project_1 /var/www/project_1
...

项目根目录 运行 时构建成功:

docker build -t <my tag> .