Docker的镜像、容器的存储层是Union FS,分层存储结构。所以任何镜像除了最上面一层打上标签(tag)外,其它下面依赖的一层层存储也是存在的。这些镜像没有打上任何标签,所以在 docker images -a 的时候会以的形式显示。注意观察一下 docker pull 的每一层的sha256的校验值,然后对比一下中的相同校验值的镜像,它们就是依赖镜像。这些镜像不应当被删除,因为有标签镜像在依赖它们。
丢了标签的镜像
这类镜像可能本来有标签,后来丢了。原因可能很多,比如:
docker pull 了一个同样标签但是新版本的镜像,于是该标签从旧版本的镜像转移到了新版本镜像上,那么旧版本的镜像上的标签就丢了;
docker build 时指定的标签都是一样的,那么新构建的镜像拥有该标签,而之前构建的镜像就丢失了标签。
这类镜像被称为 dangling - 虚悬镜像,这些镜像可以删除,使用 dangling=true 过滤条件即可。
手动删除 dangling 镜像
docker rmi $(docker images -aq -f "dangling=true")
docker rmi $(docker images --filter "dangling=true" -q --no-trunc)
仅供参考
网友评论