【问题标题】:Docker build gives "unable to prepare context: context must be a directory: /Users/tempUser/git/docker/Dockerfile"Docker 构建给出“无法准备上下文:上下文必须是一个目录:/Users/tempUser/git/docker/Dockerfile”
【发布时间】:2017-04-08 15:36:52
【问题描述】:

我有一个用于构建 Ubuntu 映像的 Dockerfile。但每当我跑步时

docker build -t ubuntu-test:latest ./Dockerfile

它在控制台上显示以下错误

无法准备上下文:上下文必须是目录:/Users/tempUser/git/docker/Dockerfile

我在 Mac OsX 上。我也试过sudo。没有任何效果。

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    您需要改为指向 目录。您不得指定 dockerfile。

    docker build -t ubuntu-test:latest . 确实工作

    docker build -t ubuntu-test:latest ./Dockerfile不起作用

    【讨论】:

    • 为什么会这样?当您可以轻松地将其指向文件本身时,需要指向一个目录似乎很奇怪
    • 根据@JakubKnejzlik 的以下回答,您可以使用-f 标志指向一个文件(然后仍然引用一个目录,通常使用.,所以docker 仍然有它想要的上下文)
    • 仍然报错:unable to prepare context: unable to evaluate symlinks in Dockerfile path: lstat /home/kes/work/projects/sidnet/chimera/Chimera-DevEnv/Chimera/Dockerfile: no such file or directory
    【解决方案2】:

    您也可以使用-f 选项运行 docker build

    docker build -t ubuntu-test:latest -f Dockerfile.custom .

    【讨论】:

    • 这对我有用。在我的情况下 Dockerfile 名称是 Dockerfile-abcd 所以我不得不解雇:docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
    【解决方案3】:

    了解上下文

    docker build 命令

    docker的构建命令的基本语法是

    docker build -t imagename:imagetag context_dir
    

    上下文

    上下文是一个目录,它决定了 docker 构建过程将看到什么:从 Dockerfile 的角度来看,文件系统中的任何文件 context_dir/mydir/myfile 都将在 Dockerfile 中变为 /mydir/myfile,因此在构建过程中。

    码头文件

    如果 dockerfile 被称为 Dockerfile 并且存在于上下文中,它将通过命名约定隐式找到。 这很好,因为这意味着您通常可以立即在任何 docker 容器中找到 Dockerfile。

    如果你坚持使用不同的名字,比如“/tmp/mydockerfile”,你可以像这样使用-f

    docker build -t imagename:imagetag -f /tmp/mydockerfile context_dir
    

    但是 dockerfile 不会在同一个文件夹中,或者至少会更难找到。

    【讨论】:

      【解决方案4】:

      我收到错误的原因之一是文件名确保文件名是 Dockerfile 所以我想通了,希望它可以帮助某人。

      【讨论】:

        【解决方案5】:

        我面临同样的问题。我正在使用docker version:17.09.0-ce

        我遵循以下步骤:

        1. 创建 Dockerfile 并添加了创建 docker 镜像的命令
        2. 转到我们创建 Dockfile 的目录
        3. 执行下面的命令$ sudo docker build -t ubuntu-test:latest .

        它解决了问题并成功创建了图像。

        注意:构建命令取决于 docker 版本以及我们使用的构建选项。 :)

        【讨论】:

          【解决方案6】:

          要在构建时指定Dockerfile,可以使用:

          docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile
          

          但如果有依赖于相对路径的ADDCOPY 命令,它将失败。有多种方法可以为docker build 指定context,您可以参考docs of docker build 了解更多信息。

          【讨论】:

          • ubuntu 12.04 执行此操作:docker build -t ubuntu:12.04 - &lt; Dockerfile 您必须位于 Dockerfile 的根目录中
          【解决方案7】:

          很简单,每当运行 Docker 构建时,docker 想知道镜像名称是什么,所以我们需要传递 -t : 。现在确保您位于拥有 Dockerfile 并运行的同一目录中

          docker build -t &lt;image_name&gt;:&lt;version&gt; . 例子 docker build -t my_apache:latest . 假设您与 Dockerfile 位于同一目录中,否则传递 -f 标志和 Dockerfile。

          docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile

          【讨论】:

          • 为了让第二个命令为我运行,我不得不稍微改变它:docker build -t my_apache:latest -f ~/Users/documents/myapache/Dockerfile(注意在末尾添加了.
          猜你喜欢
          • 2017-08-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-15
          • 1970-01-01
          • 2016-06-01
          • 1970-01-01
          相关资源
          最近更新 更多