Docker build 提供“无法准备上下文: 上下文必须是一个目录:/Users/temUser/git/Docker/Dockerfile”

我有一个 Dockerfile,用来构建一个 Ubuntu 映像

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

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

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

我用的是 Mac OsX 我也试过 sudo没用。

169546 次浏览

您需要指向 目录。不能指定 dockerfile。

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

docker build -t ubuntu-test:latest ./Dockerfile不是工作

若要在生成时指定 Dockerfile,可以使用:

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

但是如果有取决于相对路径的 ADDCOPY命令,那么它就会失败。有很多方法可以为 docker build指定 context,你可以参考 码头建筑文件获得更多信息。

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

我遵循以下步骤:

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

成功地解决了问题,树立了形象。

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

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

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

很简单,每当运行 Docker build 时,Docker 都想知道映像名称是什么,所以我们需要传递-t: 。现在,请确保您所在的目录与存放 Dockerfile 并运行它的目录相同

docker build -t <image_name>:<version> . 例子 假设您与您的 Dockerfile 位于同一目录中,则为 pass-f 标志和 Dockerfile。

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

理解背景

docker build命令

Docker 的 build 命令的基本语法是

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 将不在同一个文件夹中,或者至少更难找到。

我得到一个错误的原因之一是文件名确保文件名是 文件夹 所以我想通了,希望能帮到别人。