Docker磁盘空间清理

文章介绍了如何查看和清理Docker容器日志,包括通过命令限制日志大小、设置全局日志配置,以及使用脚本清理和检查日志大小。同时,针对/var/lib/docker/overlay2目录磁盘占用问题,提出了使用Dockersystem命令进行磁盘空间回收和清理未使用数据卷的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、容器日志清理

1.查看容器日志大小

find /var/lib/docker/containers/ -name *-json.log |xargs du -sh

2.运行时进行控制

# max-size:容器日志最大500M
# max-file:最大日志数3个(*-json.log, *-json.log.1, *-json.log.2)
docker run -it --log-opt max-size=500m --log-opt max-file=3 java:8u111

3.容器日志全局设置(只对新建的容器有效)

// 1.全局设置日志大小和生成日志文件个数
// (vim /etc/docker/daemon.json)
{ 
 "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}
// max-size=500m,意味着一个容器日志大小上限是500M
// max-file=3,容器有三个日志,分别是id+json,id+1.json,id+2.json
// 2.重启docker守护进程
systemctl daemon-reload
systemctl restart docker
// 注意:设置的日志大小,只对新建的容器有效

4.日志清理脚本:clean_docker_log.sh

#!/bin/sh

 echo "======== start clean docker containers logs ========"

 logs=$(find /var/lib/docker/containers/ -name *-json.log)

 for log in $logs
    do
        echo "clean logs : $log"
        cat /dev/null > $log
    done

 echo "======== end clean docker containers logs ========"

如果docker容器正在运行,那么使用rm -rf方式删除日志后,通过df -h会发现磁盘空间并没有释放。原因是在Linux或者Unix系统中,通过rm -rf或者文件管理器删除文件,将会从文件系统的目录结构上解除链接(unlink)。如果文件是被打开的(有一个进程正在使用),那么进程将仍然可以读取该文件,磁盘空间也一直被占用。正确姿势是cat /dev/null *-json.log,当然你也可以通过rm -rf删除后重启docker。

// 设置执行权限
chmod +x clean_docker_log.sh
// 执行
./clean_docker_log.sh

5.日志大小脚本:docker_log_size.sh

#!/bin/sh

echo "======== docker containers logs file size ========" 

logs=$(find /var/lib/docker/containers/ -name *-json.log) 

for log in $logs 
    do 
       ls -lh $log  
    done 
// 设置执行权限
chmod +x docker_log_size.sh
// 执行
./docker_log_size.sh

二、/var/lib/docker/overlay2磁盘空间占用太大问题

1.Docker System命令

docker system df用于查看Docker的磁盘使用情况:

[root@Docker110 ~]# docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          9         6         18.32GB   2.754GB (15%)
Containers      7         0         2.227GB   2.227GB (100%)
Local Volumes   2         2         3.92GB    0B (0%)
Build Cache     0         0         0B        0B

可知,Docker镜像占用了18.3GB磁盘,Docker容器占用了2.2GB磁盘,Docker数据卷占用了3.9GB磁盘。

docker system prune命令可以用于清理磁盘

docker system prune -a
  • 已停止的容器(container)
  • 未被任何容器所使用的卷(volume)
  • 未被任何容器所关联的网络(network)
  • 所有悬空镜像(image)
  • -a: 清除所有未使用的镜像和悬空镜像。注意,这两个命令会把你暂时关闭的容器,以及暂时没有用到的Docker镜像都删掉了……所以使用之前一定要慎重

2.清理未使用的数据卷

# 清理掉未被使用的数据卷
docker volume prune

# 不用输入y确认
docker volume prune -f
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值