我如何在本地Docker映像上看到额外的标签?

时间:2019-03-27 03:52:28

标签: docker

当我使用标签在本地构建Docker映像,然后分配辅助标签时,我无法列出该映像的所有标签。

我在构建,保存或加载Docker映像时丢失了标签,并且试图在每一步跟踪映像的状态。请注意,这是本地Docker文件(如笔记本电脑中的文件),无法发送到远程存储库。运行docker images时,我可以看到使用其中一个标签创建的图像,但不是全部。

$ docker build -t my/repo:first_tag
$ docker tag my/repo:first_tag my/repo:second_tag

运行docker images时,我只会看到第一个标记显示为 the 标记。

$ 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

1 个答案:

答案 0 :(得分:1)

如果要列出特定图像的标签,可以运行:

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"