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

标签 docker dockerfile

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

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

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

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

最佳答案

TL; 博士

从根目录运行它:
docker build . -f ./path/to/dockerfile
长答案:

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

为什么

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

  • 你的 Dockerfile
  • 上下文

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

    thats how the docs put it:

    A build’s context is the set of files located in the specified PATH or URL. The build process can refer to any of the files in the context. For example, your build can use a COPY instruction to reference a file in the context.



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

    上下文仍然可以更改:

    毕竟,您是指定上下文的人。因为 docker build 命令接受上下文和 dockerfile 路径。当我运行时:
    docker build .
    我实际上是在给它我当前目录的上下文,(我省略了 dockerfile 路径,所以它默认为 PATH/Dockerfile )

    因此,如果您在 dockerfiles/Dockerfile.dev 中有一个 dockerfile ,您应该将自己放在您想要作为上下文的目录中,然后运行:
    docker build . -f dockerfiles/Dockerfile.dev
    同样适用于 docker-compose 构建部分(您在那里指定上下文和 dockerfile 路径)

    希望这是有道理的。

    关于docker - 如何在 dockerfile 中向上导航一个文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56587758/

    相关文章:

    Docker:Dockerfile 中的默认 WORKDIR 是什么?

    dockerfile COPY 不复制所有文件

    docker - Docker容器的IP - Virtualbox + Windows

    Docker 通过远程 API 将图像保存到 tar

    ruby-on-rails - 使用 docker 的服务发现和守护进程

    docker - 操作方法 : Dockerfile layer(s) reuse/reference

    python - docker-lambda sqlalchemy选择,无结果

    docker - stdin不是 Jenkins 的tty

    Docker - 挂载卷后执行命令

    Dockerfile 和 dev/test/prod 环境