当我使用标记在本地构建 Docker 镜像,然后分配辅助标记时,我无法列出该镜像的所有标记。
我在构建、保存或加载 docker 图像时丢失了标签,并且我试图在每一步跟踪我的图像状态。请注意,这是一个本地 Docker 文件(就像在我的笔记本电脑上一样),不能发送到远程存储库。当我运行 docker images
我可以看到使用其中一个标签创建的图像,但不是全部。
$ docker build -t my/repo:first_tag
$ docker tag my/repo:first_tag my/repo:second_tag
当我运行
docker images
我只看到第一个标签显示为标签。$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my/repo first_tag abcd1234 6 seconds ago 100MB
我想以某种方式显示带有所有标签的图像,例如:
my/repo:
first_tag
second_tag
是否存在这样的命令,如果存在,它是什么?
编辑:事实证明我添加了错误的标签,上面显示的代码并不代表它。我正在做的实际上是:
$ docker build -t my/repo:first_tag
$ docker tag my/repo:first_tag my/repo
请注意,第二个标签上没有实际标签。当我实际运行问题中的代码时,我得到以下输出:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
my/repo second_tag abcd1234 6 seconds ago 100MB
my/repo first_tag abcd1234 6 seconds ago 100MB
最佳答案
如果要列出特定图像的标签,可以运行:
docker images my/repo --format="{{ .Tag }}"
--format
在这里仅用于保留有趣的列。默认情况下,docker images my/repo
将返回有关 my/repo
的所有信息(存储库、标签、图像 ID、创建和大小),就像 docker images
(没有过滤存储库)一样。编辑 :按标签对图像进行分组
由于
--format
选项占位符是有限的( https://docs.docker.com/engine/reference/commandline/images/#format-the-output ),因此您无法访问一些有趣的属性作为 .RepoTags
来检索与图像摘要关联的所有标签。但是,您可以通过 docker inspect
获取所需图像并使用一些 shell 和 jq
魔法来做到这一点(jq
是一种操作 JSON 的工具):docker images my/repo --format="{{ .ID }}" | \
sort | uniq | \
xargs docker inspect | \
jq -r '.[] | [ .Id, (.RepoTags | join(",")) ] | @csv'
说明:
--format="{{ .ID }}"
相关的图像ID(my/repo
)sort | uniq
)(如果有)(因为每个图像 ID 有多个标签)xargs
),检查该图像(docker inspect
):jq
检索类似 <id of the image>,<tags related to the image>
的字符串。与此图像相关的标签以逗号 (join(",")
) 示例结果:
"sha256:abcd1234...","my/repo:v1"
"sha256:abcd2345...","my/repo:v2"
"sha256:abcd3456...","my/repo:v3,my/repo:tag"
关于docker - 如何在本地 Docker 镜像上看到额外的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55369528/