Docker Swarm容器镜像未在docker image ls显示及获取digest方法
Docker Swarm镜像标签不显示问题及镜像Digest查看方法
一、镜像标签未在docker image ls中显示的原因
- 标签被移除或覆盖:容器启动后,可能通过
docker image tag修改了镜像标签,或者拉取了同一镜像的其他版本标签,导致原0.4.3-survival标签被移除。但容器启动时会记录当时的镜像标签信息,所以docker container ls仍会显示该标签,而docker image ls只显示当前存在的标签。 - Swarm镜像分发机制:Docker Swarm部署时,镜像可能从集群内其他节点分发而来,本地节点以内容寻址(Digest)的方式存储镜像,并未保留原标签。
docker container ls显示的标签是来自docker-compose.yml的配置记录,而非本地镜像的实际标签。 - 镜像标签被清理:如果执行过
docker image prune或类似清理命令,未被引用的镜像标签会被删除,但正在运行的容器对应的镜像层不会被清理,因此容器能正常运行,docker container ls显示原标签,但docker image ls中找不到该标签。
二、查看容器所用镜像的Digest字段的方法
- 使用
docker inspect命令直接查看:
针对单个容器,执行以下命令(替换<容器ID或名称>为实际值):
该命令会返回镜像的完整Digest(格式为docker inspect --format='{{.Image}}' <容器ID或名称>sha256:xxxxxx...)。如果要同时显示镜像标签和Digest,可以用:docker inspect --format='镜像标签: {{.Config.Image}} | 镜像Digest: {{.Image}}' <容器ID或名称> - 通过镜像ID查看Digest:
先从docker container ls中获取容器使用的镜像ID,再执行:
输出结果中会包含该镜像的Digest信息。docker image inspect --format='{{.RepoDigests}}' <镜像ID> - 使用
docker container ls的详细格式输出:
执行以下命令可以批量查看容器的镜像标签和对应的镜像Digest:docker container ls --no-trunc --format='{{.Names}} | 镜像标签: {{.Image}} | 镜像Digest: {{.ImageID}}'
内容的提问来源于stack exchange,提问作者Genarito
相关产品推荐
相关产品推荐

