docker: "build" 需要 1 个参数。见'docker build --help'

Posted

技术标签:

【中文标题】docker: "build" 需要 1 个参数。见\'docker build --help\'【英文标题】:docker: "build" requires 1 argument. See 'docker build --help'docker: "build" 需要 1 个参数。见'docker build --help' 【发布时间】:2015-05-13 20:23:54 【问题描述】:

尝试按照说明从 docker 网站构建 docker 映像。

https://docs.docker.com/examples/running_redis_service/

这是我得到的错误,我会按照文档上的说明使用这个 Dockerfile

FROM        ubuntu:14.04
RUN         apt-get update && apt-get install -y redis-server
EXPOSE      6379
ENTRYPOINT  ["/usr/bin/redis-server"]


sudo docker build -t myrepo/redis
docker: "build" requires 1 argument. See 'docker build --help'.

如何解决?

【问题讨论】:

【参考方案1】:

需要加一个点,表示使用本地目录下的Dockerfile。

例如:

docker build -t mytag .

这意味着你使用本地目录中的Dockerfile,如果你使用docker 1.5你可以在其他地方指定一个Dockerfile。从 docker build 的帮助输出中提取:

-f, --file="" Name of the Dockerfile(Default is 'Dockerfile' at context root)

【讨论】:

能否请您准确地标记命令:“docker build -t mytag 。”没看到点 @user2915097 我不同意。 (dot) 表示本地目录,因为在使用 -f (--file) 选项时,将 . (点)仍然是强制性的。 .指定构建的上下文 问题的流行程度表明 docker 命令的语法是多么的不清楚......我个人认为 dot 只是句子的结尾...... 来自docs.docker.com/get-started/part2/#apppy 的您好 - 我太盲目了,看不到 .也有!【参考方案2】:

您是否从其他地方(网页或其他文件)复制了构建命令?尝试从头开始输入。

我从 AWS 教程中复制了一个构建命令并将其粘贴到我的终端中,但遇到了这个错误。这让我快疯了。手动输入后,成功了!仔细观察,发现我之前失败的命令时,“破折号”字符有所不同,它比我自己使用“减号/破折号”键键入时得到的更细、更长的破折号。

不好:

sudo docker build –t foo .

好:

sudo docker build -t foo .

你能看出区别吗?..剪切和粘贴很难。

【讨论】:

谢谢兄弟!!这正是发生在我身上的事。而且我不知道为什么,因为复制的文本与我输入的相同(我检查过)。确实,C&P 很难。 也是我的问题。应该有更高的赞成票,因为它指出了可能是最常见的问题【参考方案3】:

使用以下命令

docker build -t mytag .

注意 mytag 和 dot 之间有一个空格。这个点代表当前的工作目录。

【讨论】:

【参考方案4】:

在旧版本的 Docker 上,您似乎需要使用以下顺序:

docker build -t tag .

而不是

docker build . -t tag

【讨论】:

【参考方案5】:

打开 PowerShelland 并按照这些说明进行操作。 这种类型的错误通常出现在 Windows S.O. 使用命令构建时需要一个选项和一个路径。

出现这种类型的错误是因为您没有指定 Dockerfile 的路径。

试试这个:

C:\Users\Daniele\app> docker build -t friendlyhello C:\Users\Daniele\app\
    friendlyhello 是您分配给您的容器的名称 C:\Users\Daniele\app\ 是包含您的 Dockerfile 的路径

如果要添加标签

C:\Users\Daniele\app> docker build -t friendlyhello:3.0 C:\Users\Daniele\app\

【讨论】:

【参考方案6】:


最后你需要一个 DOT...


例如:

$ docker build -t <your username>/node-web-app .

有点隐蔽,但如果你注意最后的....

【讨论】:

你拯救了我的一天。谢谢你。 不一定是当前目录('点'符号)。它只是 dockerfile 的构建上下文。【参考方案7】:

Docker 构建命令格式

在你的 powershell 中: 出现这种类型的错误是因为您没有指定 Dockerfile 的路径。

试试这个:

$ docker build -t friendlyhello:latest -f C:\\TestDockerApp\\Dockerfile.txt

friendlyhello 是您分配给容器并添加版本的名称,只需使用 :latest

-f C:\TestDockerApp\Dockerfile.txt - 你想添加一个标签,因为构建命令需要一个参数或标签 - DockerFile 是一个文本文档,因此明确添加扩展名 .txt

**试试这个格式:

$ docker build -t friendlyhello:latest -f C:\\TestDockerApp\\Dockerfile.txt .**

【讨论】:

您提供的命令应该会失败并出现同样的错误。您必须包含构建上下文作为参数,通常是 . 以指示应将当前目录作为构建上下文发送到 docker 引擎。【参考方案8】:

只需在命令末尾提供点 (.),包括一个空格。

示例:

命令:docker build -t "blink:v1" .

在这里你可以看到“blink:v1”,然后是一个空格,然后是点(.)

就是这样。

【讨论】:

【参考方案9】:

默认情况下,您可以从名为 docker file 和名为 Dockerfile 的文件构建 docker 映像。它具有您在 docker 容器中需要的一组命令/指令。 下面的命令创建带有标签 latest 的图像,Dockerfile 应该出现在该位置(。表示当前目录)

docker build . -t <image_name>:latest

如果文件名不是默认的(Dockerfile),您可以通过 -f 指定 Dockerfile 相同的 Docker 文件内容。

FROM busybox
RUN echo "hello world"

【讨论】:

【参考方案10】:

我的问题是需要将 Dockerfile.txt 转换为 Unix 可执行文件。一旦我这样做了,那个错误就消失了。

在执行此操作之前,您可能需要删除 .txt 部分,但在 Mac 上,转到终端并 cd 进入 Dockerfile 所在的目录和类型

chmod +x "Dockerfile"

然后它将您的文件转换为 Unix 可执行文件,然后可以由 Docker 构建命令执行。

【讨论】:

【参考方案11】:

在我的情况下,当我使用 --build-arg 标志将多个 Gitlab 环境变量传递给 docker build 时,这个错误发生在 Gitlab CI 管道中。

事实证明,其中一个变量中有一个空格,这导致了错误。由于管道日志仅显示$VARIABLE_NAME,因此很难找到。

确保引用环境变量,以便正确处理空格。

更改自:

--build-arg VARIABLE_NAME=$VARIABLE_NAME

到:

--build-arg VARIABLE_NAME="$VARIABLE_NAME"

【讨论】:

保存我的谷歌搜索 ;) 这正是我遇到的问题。非常感谢! 你刚刚救了我的命。 对我来说,我使用了 --build-arg 选项,但我收到了这个错误。我在我的价值周围加上引号并修复了它......现在是run: docker build --build-arg SECRET="$ secrets.MY_SECRET " --tag myRepo/myImage:myTag .【参考方案12】:

以下命令对我有用。 Docker 文件放置在 my-app-master 文件夹中。

docker build -f my-app-master/Dockerfile -t my-app-master 。

【讨论】:

【参考方案13】:

如果有人在尝试标记-t 图像并从未命名为Dockerfile 的文件(即不简单地使用. 路径)构建它时遇到此问题,您可以这样做像这样:

docker build -t my_image -f my_dockerfile .

请注意,docker 需要一个目录作为参数,文件名作为选项。

【讨论】:

是的!不能使用--file 没有底部. dot 什么鱼,我们还需要。 :( 是的,它奏效了。 太棒了。你是怎么发现最后需要这个点的? :)【参考方案14】:

从命令运行:

sudo docker build -t myrepo/redis

没有“参数”传递给docker build 命令,只有一个标志-t 和该标志的值。在 docker 解析了命令的所有标志之后,当您运行构建时应该还剩下一个参数。

该参数是构建上下文。标准命令包括一个用于上下文的尾随点:

sudo docker build -t myrepo/redis .

什么是构建上下文?

每个 docker build 都会向构建服务器发送一个目录。 Docker 是一个客户端/服务器应用程序,构建运行在服务器上,而服务器不一定是运行 docker 命令的位置。 Docker 使用构建上下文作为COPYADD 步骤中使用的文件的源。当您在当前目录中运行构建时,您将为上下文传递一个.,也就是当前目录。你可以传递一个完全不同的目录,甚至是一个 git repo,docker 将使用它作为上下文来执行构建,例如:

docker build -t sudobmitch/base:alpine --target alpine-base \
  'https://github.com/sudo-bmitch/docker-base.git#main'

有关构建命令的这些选项的更多详细信息,请参阅docker build documentation。

如果包含参数会怎样?

如果您包含构建上下文的值(通常是 .)并且仍然看到此错误消息,则您可能传递了多个参数。通常这是由于未能解析标志,或传递带有空格且不带引号的字符串。 docker 看到多个参数的可能原因包括:

路径或参数周围缺少带空格的引号(注意使用其中可能包含空格的变量)

命令中的破折号不正确:确保手动输入这些破折号,而不是复制和粘贴

不正确的引号:智能引号在命令行上不起作用,请手动键入它们而不是复制和粘贴。

不是空格的空格,或者看起来不是空格的空格。

所有这些都来自拼写错误或复制并粘贴来自修改文本以使其看起来更漂亮的源,从而将其用作命令。

如何确定 CLI 错误在哪里?

我必须调试的最简单方法是运行不带任何其他标志的命令:

docker build .

一旦成功,重新添加标志直到出现错误,然后您就会知道哪个标志被破坏并且需要修复/添加引号或更正破折号等。

【讨论】:

以上是关于docker: "build" 需要 1 个参数。见'docker build --help'的主要内容,如果未能解决你的问题,请参考以下文章

璁板綍瑙嗛鈥?Why I build Docker"

如何在"特殊"的网络环境下编译 Docker

docker build 失败 - “无法分配内存”

在docker build过程中执行apt-get update时报错"Could not connect to archive.ubuntu.com:80"如何处理?

如何在“docker build”期间更新 Docker 映像中的 /etc/hosts 文件

执行Docker build时,有部分需要×××的需求,通过引入http_proxy 解决: