×

生产环境Docker应该这样配置,可避免日志太多,磁盘被撑爆等问题

hqy hqy 发表于2026-02-08 11:39:19 浏览4 评论0

抢沙发发表评论

生产环境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>)

或者更稳一点:

  1. docker stop 停掉容器
  2. docker rm 删除容器
  3. 使用轮转参数重新 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 设置全局默认
  • 老容器要么清理日志,要么重启带轮转参数
  • 数据目录需要设置一个较大的挂载点,尽量不要放在根目录下


打赏

本文链接:https://kinber.cn/post/6217.html 转载需授权!

分享到:


推荐本站淘宝优惠价购买喜欢的宝贝:

image.png

 您阅读本篇文章共花了: 

群贤毕至

访客