今天咱们来聊聊在生产环境中怎么正确配置Docker,重点得解决日志处理的问题,不然日志把磁盘撑爆了那可就麻烦大了。
在部署生产级的Docker服务时,合理配置日志管理策略至关重要,否则源源不断的日志很快就能占满宝贵的磁盘空间。

一、Docker日志的“坑”
Docker默认使用的是json-file日志驱动。这个驱动有个特点:日志会一直写,不停地写,永无止境地写……它既没有大小限制,也不会自动轮转,更不会自己清理!
日志默认存放的位置在:
/var/lib/docker/containers/
当你某天突然注意到它的时候,很可能已经为时已晚:它可能已经悄悄吃掉了好几十个G,甚至把整个磁盘都占满了,服务直接挂掉!
二、如何解决日志膨胀问题
核心思路是通过日志轮询机制来控制日志文件的体积。下面介绍三种配置日志轮询的方法。
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. 修改Docker全局配置
如果想对所有新建的容器都生效,那就需要修改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:用于设置Docker的数据存储目录,默认在 /var/lib/docker 下。改成大容量挂载点是个好习惯。 live-restore:启用后,当Docker服务重启时,运行中的容器不会停止,可以避免因服务重启导致业务中断。
配置完成后,重启Docker服务使配置生效:
systemctl restart docker
重要提示:此全局配置只对之后新创建的容器生效!之前已经存在的容器不受影响。
3. 处理正在运行的容器
对于已经在跑的老容器,你可以用下面这个命令快速清空日志(生产环境慎用!):
echo “” > $(docker inspect --format=’{{.LogPath}}’
或者采用更稳妥一点的办法:
1. 先用 docker stop 停掉容器。
2. 再用 docker rm 删除容器。
3. 最后带上日志轮转参数,重新 run 起来。
4. 禁用容器日志输出
这个操作要非常谨慎,因为它可能会影响应用的正常运行,而且以后排查问题也会很不方便。
docker run --log-driver=none 容器名
5. 日志紧急清理
这个方法仅推荐在磁盘告急时临时救急使用!
find /var/lib/docker/containers -name *-json.log -exec truncate -s 0 {} ;
三、实战配置建议
根据不同的业务场景,可以调整具体的配置值。
Docker默认的日志设置确实是个“坑”,我们一定要手动去配置它。
推荐的最佳实践组合:
• 使用 json-file 驱动,并配合 max-size 和 max-file 参数。
• 通过修改 daemon.json 来设置全局默认策略。
• 对于已有的老容器,要么手动清理其日志,要么就重启并带上轮转参数。
• 数据目录最好单独设置在一个容量较大的挂载点下,尽量不要放在根目录。
