Docker构建给出“无法准备上下文:上下文必须是目录:/ Users / tempUser / git / docker / Dockerfile”


98

我有一个Dockerfile应该建立一个Ubuntu图像。但是我什么时候跑

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

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

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

我在Mac OsX上。我也尝试过sudo。没事

Answers:


148

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

docker build -t ubuntu-test:latest .确实有效

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


为什么会这样呢?当您可以轻松地将其指向文件本身时,需要指向目录似乎很奇怪
Monica Heddneck


17

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

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

但是,如果存在ADDCOPY命令取决于相对路径,它将失败。有多种方法可以指定contextfor docker build,有关更多信息,请参考docker build的文档


这样做是针对ubuntu 12.04的docker build -t ubuntu:12.04 - < Dockerfile您必须位于Dockerfile
Dominic Motuka,2017年

16

了解背景

docker build命令

docker build命令的基本语法是

docker build -t imagename:imagetag context_dir

上下文

上下文是一个目录,它确定docker构建过程将要看到的内容:从Dockerfile的角度来看,文件context_dir/mydir/myfile系统中的任何文件都将进入/mydir/myfileDockerfile中,因此将在构建过程中。

docker文件

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

如果您坚持使用其他名称,例如说“ / tmp / mydockerfile”,则可以这样使用-f

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

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


2

很简单,无论何时运行Docker构建,Docker都想知道映像的名称是什么,因此我们需要传递-t:。现在确保您在拥有Dockerfile并运行的目录中

docker build -t <image_name>:<version> . 例如 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请注意.在末尾添加了一个)
Josh

2

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

我遵循以下步骤:

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

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

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


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.