当我使用标签在本地构建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
答案 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"