docker:" build"需要1个参数。请参阅#docker build --help'

时间:2015-03-11 20:40:22

标签: docker containers

尝试按照从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'.

如何解决?

14 个答案:

答案 0 :(得分:409)

你需要添加一个点,例如docker build -t mytag .,这意味着你在本地目录中使用Dockerfile,如果你使用docker 1.5,你可以在其他地方指定一个Dockerfile,从docker build {{1的帮助中提取}}

答案 1 :(得分:23)

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

我从AWS教程复制了一个构建命令,并将其粘贴到我的终端中,并收到此错误。这让我发疯了。用手输入后,它有效!仔细观察我以前失败的命令,我注意到了" dash"角色是不同的,如果我使用"减号/破折号"我自己输入的字符比我得到的更薄更长。键。

为:

  

sudo docker build -t foo。

好:

  

sudo docker build -t foo。

你能看出差异吗?剪切和粘贴很难。

答案 2 :(得分:11)

使用以下命令

docker build -t mytag .

请注意,mytag和dot之间有空格。该点代表当前的工作目录。

答案 3 :(得分:9)

enter image description here只需在命令末尾添加点(。),包括一个空格。

示例:

命令:docker build -t“ blink:v1”。

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

就这样。

答案 4 :(得分:8)

万一有人在尝试标记-t图像并从未命名为Dockerfile的文件中构建图像时(即不仅仅使用.路径)遇到这种问题),您可以这样做:

docker build -t my_image -f my_dockerfile .

请注意,docker希望将目录作为参数,并将文件名作为选项。

答案 5 :(得分:7)


  

您最后需要一个DOT ...


例如:

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

它有点隐藏,但是如果您注意最后的. ...

答案 6 :(得分:1)

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

docker build -t tag .

而不是

docker build . -t tag

答案 7 :(得分:1)

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

docker build . -t <image_name>:latest

如果文件名不是默认值,则可以通过-f指定Dockerfile(Dockerfile) Sameple Docker文件内容。

FROM busybox
RUN echo "hello world"

答案 8 :(得分:1)

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

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

答案 9 :(得分:1)

从命令运行:

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 .

一旦可行,请重新添加标记,直到出现错误为止,然后您将知道哪个标记已损坏并且需要固定/添加引号或破折号等。

答案 10 :(得分:0)

打开PowerShelland并遵循这些建议。 这种类型的错误在Windows S.O.中是典型的。 使用命令构建时需要选项和路径。

由于您没有为Dockerfile指定路径,因此存在此类错误。

试试这个:

C:\Users\Daniele\app> docker build -t friendlyhello C:\Users\Daniele\app\
  1. friendlyhello是您指定给竞争对手的名称
  2. C:\ Users \ Daniele \ app \是与您的Dockerfile进行竞争的路径
  3. 如果您想添加标签

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

答案 11 :(得分:0)

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

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

chmod +x "Dockerfile"

然后它将您的文件转换为Unix可执行文件,然后可以通过Docker build命令执行该文件。

答案 12 :(得分:0)

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

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

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

更改自:

--build-arg VARIABLE_NAME=$VARIABLE_NAME

收件人:

--build-arg VARIABLE_NAME="$VARIABLE_NAME"

答案 13 :(得分:-2)

Docker构建命令格式

在您的Powershell中: 之所以出现这种类型的错误,是因为您尚未指定Dockerfile的路径。

尝试一下:

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

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

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

**尝试使用这种格式:

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