我有一个应该构建 Ubuntu 映像的 Dockerfile。但每当我跑步
docker build -t ubuntu-test:latest ./Dockerfile
它在控制台上显示以下错误
无法准备上下文:上下文必须是目录:/Users/tempUser/git/docker/Dockerfile
我在 Mac OsX 上。我也尝试过sudo
。没有任何效果。
docker build
documentation 明确表示它会:“而不是指定上下文,您可以在URL”和“如果使用 STDIN
或指定 URL
指向纯文本文件,系统会将内容放入名为 Dockerfile
的文件中,并且忽略任何 -f
、--file
选项。在这种情况,没有上下文。”
您需要改为指向该目录。您不得指定 dockerfile。
docker build -t ubuntu-test:latest .
确实工作。
docker build -t ubuntu-test:latest ./Dockerfile
不起作用。
您还可以使用 -f
选项运行 docker build
docker build -t ubuntu-test:latest -f Dockerfile.custom .
docker build -t my-custom-name -f /path_to_my_docker_file/Dockerfile-abcd .
了解上下文
docker 构建命令
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 不会在同一个文件夹中,或者至少会更难找到。
要在构建时指定 Dockerfile
,您可以使用:
docker build -t ubuntu-test:latest - < /path/to/your/Dockerfile
但如果有依赖于相对路径的 ADD
或 COPY
命令,它将失败。有多种方法可以为 docker build
指定 context
,您可以参考 docs of docker build 了解更多信息。
docker build -t ubuntu:12.04 - < Dockerfile
您必须位于 Dockerfile 的根目录中
我面临同样的问题。我正在使用 docker version:17.09.0-ce
。
我遵循以下步骤:
创建 Dockerfile 并添加用于创建 docker 映像的命令转到我们创建 Dockfile 的目录,执行以下命令 $ sudo docker build -t ubuntu-test:latest 。
它解决了问题并成功创建了图像。
注意:构建命令取决于 docker 版本以及我们使用的构建选项。 :)
很简单,每当 Docker build 运行时,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
(注意最后添加了一个 .
)
我收到错误的原因之一是文件名确保文件名是 Dockerfile 所以我想通了,希望它可以帮助某人。
不定期副业成功案例分享
-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