从命令运行:
sudo docker build -t myrepo/redis
没有“参数”传递给docker build 命令,只有一个标志-t 和该标志的值。在 docker 解析了命令的所有标志之后,当您运行构建时应该还剩下一个参数。
该参数是构建上下文。标准命令包括一个用于上下文的尾随点:
sudo docker build -t myrepo/redis .
什么是构建上下文?
每个 docker build 都会向构建服务器发送一个目录。 Docker 是一个客户端/服务器应用程序,构建运行在服务器上,而服务器不一定是运行 docker 命令的位置。 Docker 使用构建上下文作为COPY 和ADD 步骤中使用的文件的源。当您在当前目录中运行构建时,您将为上下文传递一个.,也就是当前目录。你可以传递一个完全不同的目录,甚至是一个 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 .
一旦成功,重新添加标志直到出现错误,然后您就会知道哪个标志被破坏并且需要修复/添加引号或更正破折号等。