当前位置: 首页 > news >正文

image has dependent child images

问题:很多none的镜像无法被删除

解决过程:

1、通过 docker image prune -f 提示可删除为 0

2、直接进行删除报错:

docker rmi 8f5116cbc201Error response from daemon: conflict: unable to delete 8f5116cbc201 (cannot be forced) - image has dependent child images

批量删除容器,再删除镜像

# 停止所有容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop# 删除所有容器
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm# 删除所有none镜像
docker images|grep none|awk '{print $3 }'|xargs docker rmi

还是以失败告终。。。。。

原因
发现其实是因为TAG的问题,即有其他 image FROM 了这个 image,可以使用下面的命令列出所有在指定 image 之后创建的 image 的父 image

方案:
先查询依赖

docker image inspect --format='{{.RepoTags}} {{.Id}} {{.Parent}}' $(docker image ls -q --filter since=XXX) # XXX指镜像ID

然后根据根据TAG删除容器,发现与之关联的none会自动删除

docker rm REPOSITORY:TAG

最终方案:

先保存镜像,关联的none会自动删除,最后在导入镜像,此时之前的none也不会在显示

docker images -a |grep -v none |awk '{print "docker save "$1":"$2 " >"$2".tar && docker rmi "$1":"$2" && docker load -i "$2".tar && docker image ls -a|grep "$2""}' >docker_image.sh./docker_image.sh

补充
docker none镜像

有效的 none 镜像
Docker文件系统的组成,docker镜像是由很多 layers组成的,每个 layer之间有父子关系,所有的docker文件系统层默认都存储在/var/lib/docker/graph目录下,docker称之为图层数据库。

最后做一个总结< none>:< none> 镜像是一种中间镜像,我们可以使用docker images -a来看到,他们不会造成硬盘空间占用的问题(因为这是镜像的父层,必须存在的),但是会给我们的判断带来迷惑。

无效的 none 镜像

另一种类型的 < none>:< none> 镜像是dangling images ,这种类型会造成磁盘空间占用问题。

像Java和Golang这种编程语言都有一个内存区,这个内存区不会关联任何的代码。这些语言的垃圾回收系统优先回收这块区域的空间,将他返回给堆内存,所以这块内存区对于之后的内存分配是有用的

docker的悬挂(dangling)文件系统与上面的原理类似,他是没有被使用到的并且不会关联任何镜像,因此我们需要一种机制去清理这些悬空镜像。

我们在上文已经提到了有效的< none>镜像,他们是一种中间层,那无效的< none>镜像又是怎么出现的?这些 dangling镜像主要是我们触发 docker build 和 docker pull命令产生的。

使用下面的命令可以清理
docker rmi $(docker images -f “dangling=true” -q)
docker没有自动垃圾回收处理机制,未来可能会有这方面的改进,但是目前我们只能这样手动清理(写个脚本就好)。

http://www.lryc.cn/news/124124.html

相关文章:

  • Linux系统中基于NGINX的代理缓存配置指南
  • openCV项目开发实战--详细介绍如何改善夜间图像的照明(附python和C++源码)
  • rabbitmq的消息应答
  • 如何重置树莓派 Pico(重置外围设备失败)
  • LaWGPT基于中文法律知识的大语言模型_初步安装
  • 一文学会sklearn中的交叉验证方法,cross_validate和KFlod实战案例
  • 《面试1v1》ElasticSearch倒排索引
  • 基于架构的软件开发方法
  • 实战篇之基于二进制思想的用户标签系统(Mysql+SpringBoot)
  • Ansible 进阶
  • 滴滴Ceph分布式存储系统优化之锁优化
  • flutter开发实战-MethodChannel实现flutter与iOS双向通信
  • 华为、阿里巴巴、字节跳动 100+ Python 面试问题总结(七)
  • K8S系列一:概念入门
  • QT- QLineEdite设置自动补全功能,并修改自动补全的样式
  • 解决Adobe Flash Player已被屏蔽
  • 【Spring专题】Spring之Bean的生命周期源码解析——阶段二(IOC之实例化)
  • YOLOv8目标检测算法
  • uniapp条件编译
  • 2023年国赛数学建模思路 - 复盘:光照强度计算的优化模型
  • volte端到端问题分析(一)
  • 微信小程序(原生)搜索功能实现
  • Android AOSP源码编译——AOSP整编(二)
  • 铁是地球科学争论的核心
  • TX Text Control .NET Server for ASP.NET Crack
  • 工作纪实36-ES跨集群迁移
  • 【MFC】11.MFC文档和单文档架构-笔记
  • 2023年“研究生科研素养提升”系列公益讲座在线测评题目与参考答案
  • MySQL8.xx一主两从复制安装与配置
  • 深度学习优化器