docker的日志占满了硬盘的解决方式

docker的/var/lib/docker/overlay文件夹突然占满了硬盘

新版docker 容器位置:

/var/lib/docker/containers/

查看是不是硬盘真被占满了,查看磁盘空间:

df -h

查看哪个文件夹太大:

du -sh *

使用 docker system prune来自动清理空间,参考下面:

  • 该指令默认会清除所有如下资源:
    • 已停止的容器(container)
    • 未被任何容器所使用的卷(volume)
    • 未被任何容器所关联的网络(network)
    • 所有悬空镜像(image)。
  • 该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。
  • 添加 -a 或 --all 参数后,可以一并清除所有未使用的镜像和悬空镜像。
  • 可以添加 -f 或 --force 参数用以忽略相关告警确认信息。
  • 指令结尾处会显示总计清理释放的空间大小。

在docker运行的时候指定日志的最大磁盘容量为100M,最多文件数为3个

docker run --log -opt max-size=100m --log -opt max-file=3

查看docker所占的硬盘大小

docker system df

磁盘空间不足,本系统处理方式:

进入目录:

cd /var/lib/containers/storage/overlay

以及:

进入目录:

/var/lib/docker/overlay2/

查看各个文件夹的大小:

du -sh *

例如4790ce02e2e0623cc53b29e7a1b4bf679951bc7e481667c866ceb8c7bbf6bffe 这个容器过大,则

进入这个目录

/var/lib/containers/storage/overlay/4790ce02e2e0623cc53b29e7a1b4bf679951bc7e481667c866ceb8c7bbf6bffe/diff/root/logs/csp

以及:

/var/lib/docker/overlay2/9970fb7e942a7498f3e153063136836010af5bf4aa5cb50db35a85e64ff91744/diff/root/logs/csp

把这个文件夹下的比较早之前的log日志备份文件删除

-----------------------------------------------------------------------------------------------------

Docker下/var/lib/docker/overlay2空间清理办法

  1. 查看磁盘占用

df -h

  1. Docker 的内置 CLI 指令docker system df

可用于查询镜像(Images)、容器(Containers)和本地卷(Local Volumes)等空间使用大户的空间占用情况。

docker system df

查看详细

docker system df -v

  1. 空间清理

【1】通过 Docker 内置的 CLI 指令docker system prune来进行自动空间清理。

~]# docker system prune --help

该指令默认会清除所有如下资源:

已停止的容器(container)

未被任何容器所使用的卷(volume)

未被任何容器所关联的网络(network)

所有悬空镜像(image)。

该指令默认只会清除悬空镜像,未被使用的镜像不会被删除。添加-a 或 --all参数后,可以一并清除所有未使用的镜像和悬空镜像。

可以添加-f 或 --force参数用以忽略相关告警确认信息。

【2】另外除了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:删除无用的网络

【3】手动清除

对于悬空镜像和未使用镜像可以使用手动进行个别删除:

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. 查找系统中的大文件【以上三步仍然不可以的时候执行】查找指定目录下所有大于100M的所有文件

find /var/lib/docker/overlay2/ -type f -size +100M -print0 | xargs -0 du -h | sort -nr

  1. 对标准输入日志大小与数量进行限制

新建或修改/etc/docker/daemon.json,添加log-dirver和log-opts参数

vi /etc/docker/daemon.json

{

"log-driver":"json-file",

"log-opts": {"max-size":"3m", "max-file":"1"}

}

重启docker的守护线程

systemctl daemon-reload

systemctl restart docker

  1. docker 清理空间命令

删除悬空镜像

docker rmi $(docker images -f "dangling=true" -q)

docker image prune -a -f

#显示所有的容器,过滤出Exited状态的容器,取出这些容器的ID,

sudo docker ps -a|grep Exited|awk '{print $1}'

#查询所有的容器,过滤出Exited状态的容器,列出容器ID,删除这些容器

sudo docker rm docker ps -a|grep Exited|awk '{print $1}'

方法二:

#删除所有未运行的容器(已经运行的删除不了,只删除未运行的)

sudo docker rm $(sudo docker ps -a -q)

方法三:

#根据容器的状态,删除Exited状态的容器

sudo docker rm $(sudo docker ps -qf status=exited)

方法四:

#Docker 1.13版本以后,可以使用 docker containers prune 命令,删除孤立的容器。

sudo docker container prune

#删除所有镜像

sudo docker rmi $(docker images -q)

实在没办法,只有把/var目录下所有日志文件清空

删除三天前的日志文件:

find /var/lib/docker/overlay2/* -name ".log.*" -mtime +3 -exec rm -rf {} \;

用空文件替换这里面各个文件夹里的日志文件(或清空内容)

/var/lib/docker/containers

  • 11
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值