在docker中,一个镜像的所有标记(TAG)都被删除,而镜像仍然还在时,我们称之为dangling状态。这种镜像,在通过docker images(或者docker image ls)时,会表现为REPOSITORY
和TAG
都是<none>
,但是IMAGE ID有效。要删除这种镜像很简单,直接执行docker image prune
即可清除。
还有另外一种状态的镜像,就是其REPOSITORY
是有效的,但是其TAG是<none>
,这个时候这种镜像既无法通过prune清除,也无法通过常规的docker image rm
来删除。那么这种镜像该怎么删除呢?
答案就是通过digest!
在docker images
查看镜像列表时,默认是不会显示镜像的digest的。需要手动加上--digests=true
参数,才能看到形如sha256:xxxxx
的digest信息。这个时候,用镜像的REPOSITORY
+@
+digest
即可精确引用到该镜像,从而删除。
比如,通过docker images --digests=true
看到如下镜像:
REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE node sha256:016052a6780d578fff9ac8822e66dd483db6ffb94573028b36cdd6ea48e98082 993f38da6c6c 11 days ago 677MB
可以看到,这个node镜像,他的TAG
是
none
DIGEST
是
sha256:016052a6780d578fff9ac8822e66dd483db6ffb94573028b36cdd6ea48e98082
这个镜像无法通过docker rmi node
或者docker rmi node:<none>
删除。如果要删除它,需要执行
docker rmi node@sha256:016052a6780d578fff9ac8822e66dd483db6ffb94573028b36cdd6ea48e98082
方可删除该镜像。