目录

1.删除未被任何容器使用的本地卷

2. Docker System命令

3. 手动清理Docker镜像/容器/数据卷

3. 限制容器的日志大小

4. 重启Docker


1.删除未被任何容器使用的本地卷

要使用此命令,客户端和守护程序API版本都必须至少为1.25。在客户端上使用docker version命令可以检查客户端和守护程序API版本。

删除未被任何容器使用的本地卷。

docker volume prune -f

其中选项有:

名称,简写 说明
--filter 提供过滤值。
--force , -f 不提示确认信息,直接删除。

其他命令:docker volume rm [OPTIONS] VOLUME [VOLUME...]

删除一个或多个卷。从1.25版本起,支持一个选项--force , -f,强制删除一个或多个卷。

要使用此命令,客户端和守护程序API版本都必须至少为1.21。在客户端上使用docker version命令可以检查客户端和守护程序API版本。

2. Docker System命令

它可以用于管理磁盘空间。
docker system df命令,类似于Linux上的df命令,用于查看Docker的磁盘使用情况:

docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              147                 36                  7.204GB             3.887GB (53%)
Containers          37                  10                  104.8MB             102.6MB (97%)
Local Volumes       3                   3                   1.421GB             0B (0%)
Build Cache                                                 0B                  0B

可知,Docker镜像占用了7.2GB磁盘,Docker容器占用了104.8MB磁盘,Docker数据卷占用了1.4GB磁盘。
docker system prune命令可以用于清理磁盘,删除关闭的容器、无用的数据卷和网络,以及dangling镜像(即无tag的镜像)。docker system prune -a命令清理得更加彻底,可以将没有容器使用Docker镜像都删掉。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要想清楚吶。

执行docker system prune -a命令之后,Docker占用的磁盘空间减少了很多:

docker system df
TYPE                TOTAL               ACTIVE              SIZE                RECLAIMABLE
Images              10                  10                  2.271GB             630.7MB (27%)
Containers          10                  10                  2.211MB             0B (0%)
Local Volumes       3                   3                   1.421GB             0B (0%)
Build Cache                                                 0B                  0B

3. 手动清理Docker镜像/容器/数据卷

对于旧版的Docker(版本1.13之前),是没有Docker System命令的,因此需要进行手动清理。这里给出几个常用的命令:

删除所有关闭的容器:

docker ps -a | grep Exit | cut -d ' ' -f 1 | xargs docker rm

删除所有dangling镜像(即无tag的镜像):

docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

删除所有dangling数据卷(即无用的Volume):

docker volume rm $(docker volume ls -qf dangling=true)

3. 限制容器的日志大小

有一次,当我使用1与2提到的方法清理磁盘之后,发现并没有什么作用,于是,我进行了一系列分析。

在Ubuntu上,Docker的所有相关文件,包括镜像、容器等都保存在/var/lib/docker/目录中:

du -hs /var/lib/docker/
97G /var/lib/docker/

Docker竟然使用了将近100GB磁盘,这也是够了。使用du命令继续查看,可以定位到真正占用这么多磁盘的目录:

92G  /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53

由docker ps可知,Nginx容器的ID恰好为a376aa694b22,与上面的目录/var/lib/docker/containers/a376aa694b22的前缀一致:

docker ps
CONTAINER ID        IMAGE                                       COMMAND                  CREATED             STATUS              PORTS               NAMES
a376aa694b22        192.168.59.224:5000/nginx:1.12.1            "nginx -g 'daemon off"   9 weeks ago         Up 10 minutes                           nginx

因此,Nginx容器竟然占用了92GB的磁盘。进一步分析可知,真正占用磁盘空间的是Nginx的日志文件。那么这就不难理解了。我们Fundebug每天的数据请求为百万级别,那么日志数据自然非常大。

使用truncate命令,可以将Nginx容器的日志文件“清零”:

truncate -s 0 /var/lib/docker/containers/a376aa694b22ee497f6fc9f7d15d943de91c853284f8f105ff5ad6c7ddae7a53/*-json.log

当然,这个命令只是临时有作用,日志文件迟早又会涨回来。要从根本上解决问题,需要限制Nginx容器的日志文件大小。这个可以通过配置日志的max-size来实现,下面是Nginx容器的docker-compose配置文件:

nginx:
image: nginx:1.12.1
restart: always
logging:
driver: "json-file"
options:max-size: "5g"

重启Nginx容器之后,其日志文件的大小就被限制在5GB,再也不用担心了~

4. 重启Docker

还有一次,当我清理了镜像、容器以及数据卷之后,发现磁盘空间并没有减少。根据Docker disk usage提到过的建议,我重启了Docker,发现磁盘使用率从83%降到了19%。根据高手指点,这应该是与内核3.13相关的Bug,导致Docker无法清理一些无用目录:

it's quite likely that for some reason when those container shutdown, docker couldn't remove the directory because the shm device was busy. This tends to happen often on 3.13 kernel. You may want to update it to the 4.4 version supported on trusty 14.04.5 LTS.

The reason it disappeared after a restart, is that daemon probably tried and succeeded to clean up left over data from stopped containers.

我查看了一下内核版本,发现真的是3.13:

uname -r
3.13.0-86-generic

如果你的内核版本也是3.13,而且清理磁盘没能成功,不妨重启一下Docker。当然,这个晚上操作比较靠谱。

docker 占用磁盘空间清理 无用数据卷删除相关推荐

  1. docker占用磁盘空间太大的解决办法

    解决Docker占用磁盘空间太大的问题 docker system 命令 1.查看磁盘空间资源情况统计表 2.借助docker自带自动化清理工具进行清理(请自重) 手动清理 Docker 镜像(Ima ...

  2. 清理 Docker 占用磁盘空间

    前言 Docker 容器跑久了,其产生的日志可能会占用比较多的空间,如果你跟我一样,使用的小水管级的服务器,很容易就爆了,此时就需要清理一下,今天恰巧遇到这种情况,具体如下图: 从上图可知,空间使用率 ...

  3. Linux系统Docker下面/var/lib/docker/overlay2磁盘空间清理

    Docker下/var/lib/docker/overlay2空间清理办法 1. 查看磁盘占用 df -h 2. Docker 的内置 CLI 指令docker system df 可用于查询镜像(I ...

  4. linux中sybase删除数据库,Linux_Sybase ASE数据库的常见问题解答,1 数据库占用磁盘空间的形式 - phpStudy...

    Sybase ASE数据库的常见问题解答 1 数据库占用磁盘空间的形式是什么?Master数据库的作用是什么?如果master失败后果如何? 设备文件. 存储系统表, 系统将无法使用, 除非重建mas ...

  5. HBase oldWALs目录文件剧增占用磁盘空间问题

    出现问题原因: 当/hbase/WALs中的HLog文件被持久化到存储文件中,且这些Hlog日志文件不再被需要时,就会被转移到{hbase.rootdir}/oldWALs目录下,该目录由HMaste ...

  6. 查找磁盘占用最大的文件linux,linux查找系统中占用磁盘空间最大的文件

    Q:下午有一客户磁盘空间占用很大,使用df查看磁盘剩余空间很小了,客户想知道是哪些文件占满了文件. Q1:在Linux下如何查看系统占用磁盘空间最大的文件? Q2:在Linux下如何让文件夹下的文件让 ...

  7. 虚拟机占用磁盘空间越来越大解决方案大总结

    加粗样式虚拟机占用磁盘越来越大的解决方案大总结 在电脑上安装Vmware,安装ubuntu16.04 进行开发,使用过程中没有在意,忽然有一天发现磁盘空间快被占满了,经过排查是虚拟机的原因,具体的解决 ...

  8. 计算机管理器磁盘清理,修复win7提示“windows磁盘空间清理管理器已停止工作”的方法...

    在长期的使用电脑之后,我们运行的程序会给电脑制造很多的垃圾文件,这些文件有的可以使用第三方工具进行清理,有的只能使用系统自带的磁盘清理器进行删除.在win7中运行磁盘清理器时会遇到系统弹出" ...

  9. Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法

    Window10 系统休眠或睡眠状态恢复-占用磁盘空间 100% 问题以及解决方法 系统环境版本 排除问题过程 解决问题 总结 不知从何时开始,电脑就不定期变的非常卡,尤其是笔者平时不关机,下班都是按 ...

最新文章

  1. 解决tomcat was unable to start within问题
  2. 关于Mobile Wireless Congress 颁发的一个奖项的联想(2)
  3. VBS脚本和HTML DOM自动操作网页
  4. hdu 3635(并查集+路径压缩变形)
  5. CVPR 2021 | 澳洲国立大学提出基于模型的图像风格迁移
  6. 安装 MongoDB PHP 驱动 在CentOS 6.x和遇到的问题
  7. 浪潮存储双活方案:新疆道路运输管理局的大数据应用不再是梦
  8. 英特尔世界公开赛总决赛落幕 三只优胜战队分享30万美元奖金
  9. java笔试题_公司真题 | 用友2018秋招Java笔试题(四)
  10. 51CTO网站博客改版意见寻求
  11. MIS系统权限控制的一个简便方法
  12. 20200707每日一句
  13. maven下载安装及配置
  14. Linux 系统硬盘MBR转换为GPT格式并扩容
  15. WLAN 基础概念(一)
  16. CMS漏洞检测工具 – CMSmap
  17. 荷香莫深湎,终付秋风落。(模拟
  18. 泛泛而谈的菜鸟学习记录(四)—— Vorley噪声生成原理及噪声边缘提取
  19. iOS高级面试题及部分答案
  20. 基于爬虫+人脸识别库实现指定人物自动采集

热门文章

  1. Linux内核移植之二:Kconfig分析
  2. IAP的原理和stm8的IAP
  3. nginx源码编译和集群及高可用
  4. 医疗人工智能会替代医生吗
  5. 【转】strlen源码
  6. MySQL 日期时间相关函数整理
  7. word文档快速取消图片的链接
  8. 常见的浏览器兼容问题
  9. SQLer:无需编程语言即可将SQL查询转换为RESTful API的工具
  10. 库(静态库和动态库)