为什么某些DockerCLI子命令带有星号?
在 Docker Desktop 中,一些 CLI 子命令带有星号 (*),例如:
$ docker
Usage: docker [OPTIONS] COMMAND
(...)
Management Commands:
builder Manage builds
buildx* Build with BuildKit (Docker Inc., v0.5.1-docker)
compose* Docker Compose (Docker Inc., 2.0.0-beta.4)
(...)
scan* Docker Scan (Docker Inc., v0.8.0)
(...)
我知道这些是插件(即buildx、compose和scan),但添加星号对我来说毫无意义。
为什么在命令名称中添加星号,添加星号的源代码在哪里?
回答
星号 ( *) 是一个装饰,显示这些子命令是由插件提供的,而不是dockercli 本身的一部分。它帮助用户区分内置和插件子命令。括号中的提供者和插件版本相同,仅针对插件显示。
Asterisk 本身只是“标记”而不是子命令名称的一部分(因此运行buildx命令将只是docker buildx ...)。插件是dockercli 在运行时找到的独立二进制文件,它们的源代码(如果可用)通常位于它们自己的存储库中 - 例如buildx 这里。
docker-ce代码库中用星号装饰所有插件的函数是decoratedName() in components/cli/cli/cobra.go。然后在使用消息模板中使用该函数,该模板在列出所有子命令时呈现。
注意:上面代码库的链接指向docker-ce存储库(Dockercli存储库中的相同功能在这里和模板在这里)。