如何在 dockerfile 中向上导航一个文件夹

Gin*_*ger 3 docker dockerfile

我在构建 docker 映像时遇到了一些麻烦,因为代码的结构方式。代码是用 C# 编写的,在一个解决方案中,有很多“支持”我想要构建的应用程序的项目。

我的问题是,如果我将 dockerfile 放入根目录中,我可以构建它,没有任何问题,这没关系,但我认为这不是最佳方式,因为我们还有一些其他 dockerfile,我们还需要构建,如果我把它们全部放入根文件夹,我认为它最终会变得凌乱。

因此,如果我将 dockerfile 放入带有应用程序的文件夹中,我如何导航到根文件夹以获取我需要的文件夹?

我尝试使用“../”,但从我的角度来看,它似乎不起作用。有什么办法可以做到,或者在这种情况下最佳实践是什么?

Efr*_*tan 10

TL; 博士

从根目录运行它:

docker build . -f ./path/to/dockerfile


长答案:

在 dockerfile 中,你真的不能上去。

为什么

当 docker 守护进程构建您的映像时,它使用 2 个参数:

  • 您的 Dockerfile
  • 上下文

上下文就是您.在 dockerfile 中所指的内容。(例如,如COPY . /app)两者影响最终的形象- dockerfile决定什么事情发生。上下文告诉docker 它应该在哪些文件上执行您在该 dockerfile 中指定的操作。

这就是文档所说的:

构建的上下文是位于指定 PATH 或 URL 中的一组文件。构建过程可以引用上下文中的任何文件。例如,您的构建可以使用 COPY 指令来引用上下文中的文件。

因此,通常上下文是放置 Dockerfile 的目录。我的建议是把它留在它所属的地方。以它们的角色(Dockerfile.devDockerfile.prod等)命名您的 dockerfile ,这可以在同一个目录中包含其中的一些。

上下文仍然可以更改:

毕竟,您是指定上下文的人。因为该docker build命令接受上下文和 dockerfile 路径。当我运行时:

docker build .

我实际上是在给它我当前目录的上下文,(我省略了 dockerfile 路径,所以它默认为PATH/Dockerfile

所以如果你有一个 dockerfile dockerfiles/Dockerfile.dev,你应该把自己放在你想要作为上下文的目录中,然后运行:

docker build . -f dockerfiles/Dockerfile.dev

同样适用于docker-compose构建部分(您在那里指定上下文和 dockerfile 路径)

希望这是有道理的。