df -h查看主机磁盘,docker占用很多的硬盘空间
docker ps -as查看容器占用,如果tae-log-agent容器占用比较多的空间,如下图所示
tae-log-agent是EWS官方容器,进行数据采集,可以放心删除。在主机上执行如下脚本进行清除,运行一次就行
#! /bin/bash AGENT_CONF_DIR=/acs/system/agent/conf echo "AGENT_CONF_DIR=${AGENT_CONF_DIR}" # 1. add disable monitor config to acsagent.feat echo "===1. add disable monitor config to acsagent.feat===" echo -n "logagentDisable," > ${AGENT_CONF_DIR}/acsagent.feat # 2. restart acsagent # kill acsagent, acswatch will restart it later echo "===2. restart acsagent===" logagentPid=$(ps aux | grep -v grep | grep "/acs/system/agent" | grep acsagent | awk '{print $2}') echo "logagent pid: ${logagentPid}" kill -9 ${logagentPid} # 3. remove container:tae-log-agent echo "===3. remove container:tae-log-agent===" docker rm -f tae-log-agent echo "===disable monitor success===" exit 0
执行截图如下
随着docker的运行,关闭的容器、无用的数据卷和网络,以及不再使用的镜像,也会占用一定空间,且越来越大。
使用docker system prune指令可以将这些数据放心删除,释放相应空间
docker ps -as查看容器占用,找到占用比较大的容器
容器占用空间大,一般是应用日志占用空间,比如业务日志,access_log等,按照如下步骤解决:
1、找到占用空间的应用日志,删除,注意如果使用rm删除,需要重启一下容器才会真正释放。如果还不能解决,看下面步骤2
2、重新拉容器重启,这样容器占用的空间就会全部释放了
要注意的是,这里会清空原来容器内运行的数据,请提前做好备份
3、如果步骤2也执行不了,报磁盘空间不足
先解决文档上面tae-log-agent占用和docker文件系统占用,再执行步骤2;
依然不行的话,就需要删除docker相关的数据重新创建容器了:
1)删除ECS主机上的docker存储目录
systemctl stop docker
rm -rf /var/lib/docker/
systemctl restart docker
2)EWS页面中,删除原来的容器,重新添加容器到主机上
为了保证之后不会再出现docker容器占用磁盘特别高甚至沾满磁盘的情况,请做好如下的预防工作
1、利用免费的阿里云云监控,在机器上安装云监控插件,设置磁盘告警
2、解决tae-log-agent的占用问题,参考前面文档
3、容器内应用日志最佳实践,将日志打印到/acs/log,设置日志轮转。
1.代码或者logback等配置中设置日志目录为/acs/log
如下面的例子,tomcat的access log设置的目录为log,会存储在tomcat下(容器中),对应到宿主机ECS,docker占用的空间是翻倍的
简单来说就是,往容器中写数据会导致docker文件系统空间损耗更多,所以,最好将日志打印到挂载目录。
参考:https://open.taobao.com/doc.htm?docId=117793&docType=1
2.设置日志轮转,避免日志文件占用太大空间