Docker用户会在使用docker一段时间后发现宿主机的磁盘很容易就快被占满,并且手动docker rmi [imgName]似乎并不能释放磁盘,貌似想删掉的镜像依然在宿主机中,下面针对这一问题提出一些解决方案。

Docker空间占用查看

1.13版本后Docker提供给了一些System命令,例如df命令查看Docker占用分布:

$ docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 3 0 5.373GB 5.373GB (100%)
Containers 0 0 0B 0B
Local Volumes 0 0 0B 0B
$ docker system df -v 命令可以进一步查看空间占用细节,以确定是哪个镜像、容器或本地卷占用过高空间

清理方法

1 自动清理命令

docker system prune可对空间进行自动清理。
该命令所清理的对象如下:

已停止的容器
未被任何容器使用的卷
未被任何容器所关联的网络
所有悬空的镜像

对于上面提到的一些镜像或容器的状态,需要我们心里有点数:

已使用的镜像:指所有已被容器(包括stop的)关联的镜像,也就是docker ps -a所看到的所有容器对应的image。
未引用镜像:没有被分配或使用在容器中的镜像
悬空镜像(dangling image):未配置任何Tag(也就是无法被引用)的镜像。通常是由于镜像编译过程中未指定-t参数配置Tag导致的。

docker system prune后可以加额外的参数,如:
docker system prune -a : 一并清除所有未被使用的镜像和悬空镜像。
docker system prune -f : 用以强制删除,不提示信息。

另外除了system级别的,还有针对容器或是镜像级别的删除命令:

docker image prune:删除悬空的镜像。

docker container prune:删除无用的容器。
--默认情况下docker container prune命令会清理掉所有处于stopped状态的容器
--如果不想那么残忍统统都删掉,也可以使用--filter标志来筛选出不希望被清理掉的容器。例子:清除掉所有停掉的容器,但24内创建的除外:
--$ docker container prune --filter "until=24h" docker volume prune:删除无用的卷。
docker network prune:删除无用的网络

手动清除

对于悬空镜像和未使用镜像可以使用手动进行个别删除:
1、删除所有悬空镜像,不删除未使用镜像:
docker rmi $(docker images -f "dangling=true" -q)

2、删除所有未使用镜像和悬空镜像
docker rmi $(docker images -q)

3、清理卷
如果卷占用空间过高,可以清除一些不使用的卷,包括一些未被任何容器调用的卷(-v 详细信息中若显示 LINKS = 0,则是未被调用):
删除所有未被容器引用的卷:
docker volume rm $(docker volume ls -qf dangling=true)

4、容器清理
如果发现是容器占用过高的空间,可以手动删除一些:
删除所有已退出的容器:
docker rm -v $(docker ps -aq -f status=exited)
删除所有状态为dead的容器
docker rm -v $(docker ps -aq -f status=dead)

最新文章

  1. [原]在Fedora 20环境下安装系统内核源代码
  2. 剑指offer系列39-----矩阵中的路径
  3. C语言的ANSI/ISO标准
  4. MySQL驱动阅读------executeQuery查询的过程,基于JDBC-----5.1.26
  5. winform 防止主界面卡死
  6. ZJUT 1423 地下迷宫(期望DP&高斯消元)
  7. JavaScript第三课 (循环)
  8. Java为什么把String设计成不可变的(immutable)
  9. ArcGIS连带文字注记导出为CAD格式
  10. Linux学习(十七)压缩与打包
  11. Delphi 打印 Tprinter
  12. ps修改图片文字
  13. UVA1607-Gates(思维+二分)
  14. python----函数的动态传参
  15. Spring Boot默认Initializer(1)——ConfigurationWarningsApplicationContextInitializer
  16. excel 获取提取数字
  17. Python系列之 __new__ 与 __init__
  18. insert 语句后面不要跟 where 等条件语句
  19. (2.17)Mysql之SQL基础——日期函数
  20. 官方下拉刷新控件SwipeRefreshLayout的使用

热门文章

  1. luoguP3964 [TJOI2013]松鼠聚会
  2. bzoj 1260涂色 题解
  3. CF241E Flights 题解
  4. SpringMVC相关试题
  5. CSS样式的引入方式
  6. HDU图论题单
  7. 在spring boot里使用undertow而非tomcat
  8. mybatis-generator 模板
  9. Spring(二十三):Spring自动注入的实现方式
  10. 自己写的一个 CGBLIB 动态代理【原创】