执行docker commit提交镜像时为何产生<none>:<none>镜像?如何规避?
你本地出现的这类无标签镜像分两类,结合你的操作习惯,核心生成原因如下:
- 最主要的原因是你反复将容器提交为同一个标签的镜像。你每次执行
docker commit alezuechcontainer alezuech/denoising:version1时,Docker都会生成一个全新的镜像,同时把alezuech/denoising:version1这个标签绑定到新生成的镜像上。之前绑定这个标签的旧镜像会被自动移除标签,直接变成<none>:<none>的悬空镜像。你镜像列表里那些和最新版大小一致、创建时间逐次提前的无标签镜像,全是你之前多次提交同标签时被挤掉标签的旧版本镜像,这类镜像即使不带-a参数执行镜像查询命令也会显示。 - 另一类无标签镜像是Docker操作生成的中间缓存层。这类镜像是Docker在拉取镜像、提交镜像、构建镜像时自动生成的缓存数据,作用是加速后续的镜像相关操作,不会重复占用磁盘空间,默认只有加了
-a/--all参数查询镜像列表时才会显示。
避免这类镜像生成/干扰的方法
- 调整镜像打标逻辑,每次提交容器修改时使用全新的标签,比如按修改顺序打
version2、version3,或者加上时间戳后缀,不要反复覆盖同一个version1标签,从根源上避免旧镜像被挤掉标签变成悬空镜像。 - 如果因为测试需求必须固定使用同一个标签,可以在每次覆盖提交后定期执行悬空镜像清理命令:
docker image prune,这个命令会自动删除所有失去标签的悬空镜像,不会影响带有有效标签的正常镜像。 - 日常查询镜像列表时不要随便加
-a参数,默认的docker images/docker image ls命令只会展示带有有效标签的可用镜像,不会列出中间缓存层镜像,能避免无意义的视觉干扰。注意不要手动删除中间缓存层镜像,否则会导致后续镜像构建、提交操作丢失缓存,速度变慢。
内容的提问来源于stack exchange,提问作者Alessandro
相关产品推荐
相关产品推荐

