今天聊一下生产环境 Docker 应该怎么配置,主要是如何处理日志,避免撑爆磁盘。
今天聊一下生产环境Docker应该怎么配置,主要是如何处理日志,避免撑爆磁盘。

1. Docker日志好坑
Docker 默认使用的是json-file日志驱动。日志会一直写,一直写,一直写……没有限制、没有轮转、没有清理!
日志默认位置:
/var/lib/docker/containers/
当你发现它时,可能已经:
占了几十个 G吃满了磁盘服务都挂了!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:单个日志文件最大 10MBmax-file=3:最多保留 3 个轮转文件(最多 30MB)容器总日志控制在 30MB 内,绝不爆炸!这个只会对单个容器生效。
(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
注意:只对之后创建的容器生效!
(3) 正在运行的容器
你可以这样快速清理日志(生产环境慎用!):
echo "" > $(docker inspect --format='{{.LogPath}}'
或者更稳一点:
docker stop停掉容器docker rm删除容器使用轮转参数重新 run容器(4) 禁用日志输出
这个操作慎用,有可能影响应用运行,而且不方便后续排查
docker run --log-driver=none 容器名
(5) 日志快速清理
仅推荐在磁盘告急时临时使用!
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} \;
3. 实战建议
根据不同场景推荐配置值。
Docker 日志默认设置太坑,一定要手动配置!
最佳实践:
用json-file+max-size+max-file修改daemon.json设置全局默认老容器要么清理日志,要么重启带轮转参数数据目录需要设置一个较大的挂载点,尽量不要放在根目录下