8

我想创建一个多阶段构建过程,而每个 docker 文件都嵌套在本地自己的目录中,并为每个 Docker 文件添加了相应的依赖项。有没有办法从本地不同的目录导入 Docker 文件,而我可以使用 Docker 的FROM命令导入它,以在构建中创建多个阶段?

如果没有,我是否可以ADD将其他暂存的 Docker 文件放入当前的 Docker 文件中,然后FROM在 docker 容器中使用,在添加和使用后将其删除FROM

也许我正在考虑以错误的方式构建多阶段。

或者我可以简单地运行FROM {path/to/docker/locally}吗?这对我不起作用。

4

3 回答 3

5

如果你使用 Docker 20.10+,你可以这样做:

# syntax = edrevo/dockerfile-plus

INCLUDE+ {path/to/docker/locally}

RUN ...

INCLUDE+指令由 Dockerfile 中的第一行导入。您可以在https://github.com/edrevo/dockerfile-plus阅读有关 dockerfile-plus 的更多信息

于 2021-01-04T18:00:28.917 回答
4

有没有办法从本地不同的目录导入 Docker 文件,而我可以使用 Docker 的 FROM 命令导入它,以在构建中创建多个阶段?

不可以。该FROM指令仅用于导入预构建的镜像,不能用于导入 Dockerfile。

如果没有,我可以将其他暂存的 Docker 文件添加到当前的 Docker 文件中吗?

不可以。该ADD指令只能将构建上下文(通常是当前工作目录)内的文件复制到容器中。你不能ADD ../something /something

或者我可以简单地从 {path/to/docker/locally} 运行吗?

不,但是对您有用的一种方法是,首先构建另一个图像,说它的名称是first-image:latest,然后您可以使用COPY指令从该图像复制文件:

COPY --from=first-image:latest /some/file /some/file
于 2018-03-27T13:55:15.143 回答
0

如果我正确理解了这个问题,那么您想要实现的是构建一个图像,然后使用相同的图像并在其上构建一些东西(下一个»阶段«)。

Docker 支持这个概念,但不是通过导入另一个 Dockerfile。

Dockerfile 和它们所在的目录是自包含的,即构建映像所需的唯一内容就是这些目录内容。因此,您无法从其他目录加载其他 Dockerfile。

可行的方法是构建一个基础镜像,例如myappimage,使用 Dockerfile myappimage/Dockerfile。构建完成后,您可以在另一个 Dockerfile(例如mytestingimage/Dockerfile)中引用此基础镜像,FROM myappimage用于mytestingimagemyappimage.

然后,与您的命令和其他命令mytestingimage完全一样myappimage,但添加了额外的层。ADD

于 2018-03-27T14:58:43.303 回答