使用-f选项构建Docker无法找到Dockerfile

时间:2015-08-26 20:19:55

标签: docker

我已尝试过很多与docker -f选项的组合,但我从来没有让它工作

我可以这样做:

docker build -t foo/bar .

但我不能这样做:

docker build -t foo/bar -f Dockerfile .

或者这个:

docker build -t foo/bar -f ./Dockerfile .

这给了我以下错误:

unable to prepare context: The Dockerfile (c:\path\Dockerfile) must be within the build context (.)

我在Windows 7上通过默认的vm使用docker.Docker版本是1.8.1,build d12ea79

我看不出差异。在项目中为不同的任务设置不同的Dockerfiles可能会非常好,但是没有-f选项是不可能的。

6 个答案:

答案 0 :(得分:2)

好吧,正如错误消息所示,您的Dockerfile不在context范围内,这是您案例中的当前目录(.)。

我们的想法是,您使用-f指定的泊坞窗文件必须始终位于您指定的上下文 中。

所以,通常这应该可以正常工作:

docker build -f /path/to/context/dir/Dockerfile /path/to/context/dir

这也是:

cd /some/dir
docker build -f /some/dir/customDir/Custom-Dockerfile-name .

虽然这会失败:

docker build -f /path/to/diff/dir/Dockerfile /path/to/context/dir

从您的输出中,c:\path\Dockerfile不在.范围内(即不在您当前的工作目录中)

关于Docs的更多细节,命令解剖是:

docker build [OPTIONS] PATH | URL | -
  

docker build命令从Dockerfile和“context”构建Docker镜像。构建的上下文是位于指定PATH或URL

中的文件集

  

默认情况下,docker build命令将在构建上下文的根目录中查找Dockerfile。 -f, - file,选项允许您指定要使用的备用文件的路径。在将同一组文件用于多个构建的情况下,这非常有用。路径必须是构建上下文中的文件。如果指定了相对路径,则将其解释为相对于上下文的根。

答案 1 :(得分:1)

以下是我如何使用docker build来避免此错误的示例

docker build -f my.dockerfile ./

请注意正斜杠

答案 2 :(得分:0)

我遇到了这个问题,结果发现它是由于我的dockerfile在作为NTFS中的文件夹安装的磁盘上引起的。一旦我将它移动到常规文件夹,它就可以正常工作。

答案 3 :(得分:0)

如果您的Dockerfile不在项目根目录(当前目录)中,请在-f之后显示。

以下是我使用的示例:

docker build -t test_service -f deployment/dev/Dockerfile .

答案 4 :(得分:0)

稍晚一点,但昨天我遇到了这个问题。基本上,当使用点(.)时,您将当前目录设置为工作目录 - 如果您使用-f标志,则很可能是不正确的。所以你需要做以下事情:

docker build -f /path/to/Dockerfile /path/to/

请注意/path/to/替换.。这会将docker脚本置于正确的上下文中。如果需要,您可以使用任何其他标志(如-t)。

docker build -t foo/bar -f /path/to/Dockerfile /path/to/

这对我来说就像一个魅力。

答案 5 :(得分:-1)

如果你这样做

console.log($scope.bID)

你会注意到,除其他外

docker build --help

你可以做任何一件事

-f, --file=                     Name of the Dockerfile (Default is 'PATH/Dockerfile')

docker build -t mytag .

但您不能同时使用docker build -t mytag -f another_dockerfile .

-f,或者是.的Dockerfile,而不是