生产环境Docker应该这样配置,可避免日志太多,磁盘被撑爆等问题
·
1 Docker日志好坑
Docker 默认使用的是 json-file 日志驱动。日志会一直写,一直写,一直写……没有限制、没有轮转、没有清理!
日志默认位置:
/var/lib/docker/containers/<container-id>/<container-id>-json.log
当你发现它时,可能已经:
-
占了几十个 G
-
吃满了磁盘
-
服务都挂了!
2 如何处理日志问题
主要通过日志轮询方式处理。下面介绍三种方式设置日志轮询
2.1 运行容器时设置轮转策略
docker run -d \
--name nginx \
--log-driver json-file \
--log-opt max-size=10m \
--log-opt max-file=3 \
nginx:1.27
参数解释:
-
max-size=10m:单个日志文件最大 10MB -
max-file=3:最多保留 3 个轮转文件(最多 30MB)
容器总日志控制在 30MB 内,绝不爆炸!这个只会对单个容器生效。
2.2 修改 Docker 配置
如果你想对所有容器进行日志轮询,就执行下面配置:
编辑配置文件 /etc/docker/daemon.json
[root@harbor ~]# cat /etc/docker/daemon.json
{
"data-root": "/data/docker",
"live-restore": true,
"log-driver": "json-file",
"log-opts": {
"max-file": "3",
"max-size": "10m"
}
}

其他参数说明:
-
/data/root:设置数据存放目录,默认存放/var/lib/docker下面
-
live-restore:Docker 服务重启,容器不停止,避免重启 docker 导致业务全挂
配置完,重启 Docker 服务:
systemctl restart docker
注意:只对之后创建的容器生效!
2.3 正在运行的容器
你可以这样快速清理日志(生产环境慎用!):
echo "" > $(docker inspect --format='{{.LogPath}}' <container-id>)
或者更稳一点:
-
docker stop停掉容器 -
docker rm删除容器 -
使用轮转参数重新 run容器
2.4 禁用日志输出
这个操作慎用,有可能影响应用运行,而且不方便后续排查
docker run --log-driver=none 容器名
2.5 日志快速清理
仅推荐在磁盘告急时临时使用!
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;
3 实战建议
根据不同场景推荐配置值。
|
场景 |
建议参数 |
|---|---|
|
开发环境 | max-size=5m max-file=3 |
|
测试环境 | max-size=10m max-file=5 |
|
生产环境 | max-size=50m max-file=10 |
Docker 日志默认设置太坑,一定要手动配置!
最佳实践:
-
用
json-file+max-size+max-file -
修改
daemon.json设置全局默认 -
老容器要么清理日志,要么重启带轮转参数
-
数据目录需要设置一个较大的挂载点,尽量不要放在根目录下
更多推荐
所有评论(0)