【问题标题】:docker build - exactly 1 argumentdocker build - 正好 1 个参数
【发布时间】:2017-12-10 01:16:12
【问题描述】:

我一直在尝试在我的 ubuntu 设置上构建 syntaxnet,但遇到了一个我很难找到解决方案的问题(尽管它可能很简单)。

每当我尝试使用命令构建时:

docker build -t dragnn-oss:latest-minimal -f docker-devel/Dockerile.min

我收到错误消息:

"docker build" requires exactly 1 argument(s).

现在,我的 docker 版本是 17.06,根据这个页面, [docker: "build" requires 1 argument. See 'docker build --help',我应该可以指定一个位于不同目录的Dockerfile,所以我看不出是什么问题。

编辑:我创建了一个符号链接:

ln -s docker-devel/Dockerfile.min link1 

然后我就执行了命令:

docker build -t dragnn-oss:latest-minimal -f link1 .

它成功了。

我以为我不需要把 .最后,因为我用 -f 指定了 Dockerfile 但学到了错误。

【问题讨论】:

    标签: docker dockerfile


    【解决方案1】:

    你需要在末尾添加一个点,要么

    docker build -t mytag .

    或

    docker build -t dragnn-oss:latest-minimal -f docker-devel/Dockerile.min .

    另见

    docker: "build" requires 1 argument. See 'docker build --help'

    【讨论】:

    • 放一个 .最后让我无法准备上下文:无法评估 Dockerfile 路径中的符号链接:错误。
    • 我已经更新了我的答案,你需要指定Dockerfile的路径,后跟一个点。点指定构建的上下文。
    • 我忘了提到我已经尝试将 .之前但导致上述错误。我想我会进一步研究该特定错误消息。
    • 我想我可能已经通过创建符号链接解决了这个问题。并使用它而不是目录路径。感谢您让我清醒地看到错误。
    • 点必须在末尾,您可以使用docker build . 或我发布的其他两个示例
    【解决方案2】:

    虽然其他答案都是正确的,并且您已经找到了解决方案,但我想向您指出 documentation 的 docker build 以供遇到此问题的任何人使用。该命令应该是这样的:

    $ docker build [OPTIONS] PATH
    

    在您的示例中,您指定了两个选项(-f 和 -t)。但是您没有指定 PATH 参数。引用文档:

    PATH 指定在哪里可以找到 Docker 守护程序上构建的“上下文”文件。

    在构建镜像时上下文被发送到 Docker 守护进程。如果你想使用正确的目录作为 Docker 的构建上下文,你可以只使用 .,但是正如其他人提到的,你也可以指定一个特定的目录,例如docker-devel.

    【讨论】:

    • 是的,我阅读了文档,我感到困惑的部分是 PATH。因为“Dockerfile.min”不是“Dockerfile”的默认值,所以我想只要指定确切的文件路径就足够了。但是,我吸取了教训,事实并非如此。我刚刚进入这个,所以所有的帮助都非常感谢。
    • 另外,总是为你的东西创建一个特定的目录,如果你把你的 Dockerfile 放在 /home/$USER 中,并且你有很多巨大的视频文件,docker build 将显示很长时间,因为docker build 将您当前的工作目录(或包含 dockerfile 的文件夹)打包并将其上传到 Docker 守护程序以进行构建步骤。如果您看到 Sending build context to docker daemon 后跟 234 GB 或类似的东西,您就知道有问题了
    • PATH 不是关于 Dockerfile,而是关于构建上下文。这就是@user2915097 所说的。您指定的路径是发送到 Docker 守护程序以构建映像的目录。在您的 Dockerfile 中,您仅限于构建上下文,并且无法访问它之外的任何文件。这就是为什么您需要同时指定 Dockerfile(指令)和上下文(资源)的原因。只有这两个,Docker 才能构建镜像。
    • 是的,感谢您澄清这一点。现在我完全理解了那部分。当你这样说时,这很有意义。我太专注于这样一个事实,即在最简单的命令中“docker build . 没有 Dockerfile 并且使用了.,我没有花一秒钟时间来真正思考这一切的含义。我的错。谢谢清晰的解释。我能够使用帮助正确构建。所以干杯。
    【解决方案3】:

    指定一个目录,在这个目录中,一个 Dockerfile :

    docker build -t dragnn-oss:latest-minimal -f Dockerile.min docker-devel
    

    【讨论】:

    【解决方案4】:

    您需要在末尾添加一个仅包含路径的参数。
    如果是当前目录,那么.(简单点)就足够了。
    -f 参数仅用于文件名(Dockerfile 为默认值)

    docker build -t dragnn-oss:latest-minimal -f Dockerile.min docker-devel
    

    【讨论】:

    • 我将确切位置指定为“docker-devel/Dockerfile.min”
    • 是的,这是不正确的。对于 -f 参数,您只需指定 Dockerfile 的名称。命令末尾的参数是构建根目录的路径。您不应使用完整路径,而应仅使用目录。您是否尝试复制粘贴上面的建议?如果有,结果如何?
    • 当我尝试您的建议时,我收到一条错误消息,指出当前工作目录级别没有 Dockerfile.min。因此,我不得不执行“-f docker-devel/Dockerfile.min”。它奏效了。从我得到的信息来看,docker 似乎也能够采用完整的路径。
    猜你喜欢
    • 1970-01-01
    • 2015-05-13
    • 2023-03-16
    • 2017-05-06
    • 2021-02-06
    • 1970-01-01
    • 2017-07-06
    • 2018-02-10
    • 2015-01-23
    相关资源
    最近更新 更多