docker container目录下log过大解决

现在和朋友一起搞点东西,部署都很简单,服务器上装个docker,服务丢上去,写个docker compose配置就跑着.
有个服务最近流量涨的比较多,再加上有段时间没有部署,看服务器上的磁盘使用越来越多.

起初以为是应用的日志太多了,应用日志每天归档为gzip,保留60天,看了下并没有多少,用lsof检查也确认没有roll掉的被持有,再去容器内部看了下发现体积远没有这么大.

于是开始用du --max-depth=1 检查发现是/var/lib/docker/containers/目录, 再一看容器id就是这个服务, 再定位是<container-id>-json.log 文件.

当时磁盘已经90%以上了,那就先直接truncate掉,运行:

1
sudo truncate -s 0 /var/lib/docker/containers/<container-id>/<container-id>-json.log

后续找了相关参数给他配置上.

如果是纯docker跑的,配置:

1
docker run --log-opt max-size=1g --log-opt max-file=3 <image>

docker compose的配置:

1
2
3
4
5
6
7
8
9
version: '3'
services:
your-service:
image: your-image
logging:
driver: json-file
options:
max-size: "1g"
max-file: "3"

检查是否生效直接inspect一下:

1
docker inspect --format='{{.HostConfig.LogConfig}}' <container-id>

或者直接grep一下LogConfig

之前频繁开发部署,容器销毁重新构建没发现这个问题,也算是又增加了一点点小知识.

相关参考链接:
JSON File logging driver