如何在dockerfile中浏览一个文件夹

时间:2019-06-13 19:57:39

标签: docker dockerfile

由于构建代码的方式,我在构建docker映像时遇到了一些麻烦。该代码用C#编写,在解决方案中,有许多项目“支持”我要构建的应用程序。

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

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

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

2 个答案:

答案 0 :(得分:1)

TL; DR

从根目录运行它:

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


长答案:

在dockerfile中,您无法真正上升。

为什么

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

  • 您的Dockerfile
  • 上下文

上下文是您在dockerfile中称为.的内容。 (例如,COPY . /app) 它们都会影响最终图像-dockerfile确定将会发生什么。上下文会在哪个文件上告诉Docker它应该执行您在该dockerfile中指定的操作。

thats how the docs put it:

  

内部版本是位于以下位置的文件集   指定的PATH或URL。构建过程可以引用任何文件   在上下文中。例如,您的构建可以使用COPY指令来   在上下文中引用文件。

因此,通常上下文是放置Dockerfile的目录。我的建议是将其保留在原处。以它们的角色(Dockerfile.devDockerfile.prod等)命名您的dockerfile,可以在同一个目录中包含其中几个。

上下文仍然可以更改:

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

docker build .

我实际上是在为其提供当前目录的上下文,(我省略了dockerfile路径,因此默认为PATH/Dockerfile

因此,如果您在dockerfiles/Dockerfile.dev中有一个dockerfile,则应将自己放置在要用作上下文的目录中,然后运行:

docker build . -f dockerfiles/Dockerfile.dev

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

希望是合理的。

答案 1 :(得分:0)

您可以使用RUN命令,然后在之后执行所需的操作。

RUN cd ../ &