在使用Docker容器的过程中,日志管理是一个容易被忽视但又至关重要的环节。默认情况下,Docker会使用json-file日志驱动,并将容器的标准输出(stdout)和标准错误(stderr)全部记录到宿主机上的JSON文件中。如果不加任何限制,这些日志文件会无休止地增长,最终占满磁盘空间,导致容器异常甚至整个宿主机服务瘫痪。

本文将详细介绍如何通过修改Docker守护进程的配置文件,为所有容器统一设置日志轮转策略,并解释每个参数的实际含义。

为什么需要限制容器日志?

  • 防止磁盘写满:一个频繁输出日志的容器,一天可能产生几十GB的日志文件。
  • 提升可维护性:单个巨大的日志文件难以用普通文本工具查看,也拖慢日志分析效率。
  • 降低I/O压力:轮转后的日志可以压缩或删除,减少对磁盘的持续写入。

配置步骤

1. 编辑Docker配置文件

使用你熟悉的编辑器(如vimnano)打开Docker的守护进程配置文件:

sudo vim /etc/docker/daemon.json

如果该文件不存在,可以新建一个。

2. 添加日志相关参数

daemon.json中写入以下内容:

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}

注意:如果文件中已有其他配置(如镜像加速器、 insecure registries等),只需将log-driverlog-opts作为顶层字段合并进去。例如:

{
  "registry-mirrors": ["https://your-mirror.com"],
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "500m",
    "max-file": "3"
  }
}

3. 参数详解

参数说明
log-driver指定日志驱动。json-file是Docker默认驱动,也是我们想要配置的目标。
max-size单个日志文件的最大大小。超过该值后会自动轮转(rotate)。示例中的500m表示500兆字节。支持单位:k(KB)、m(MB)、g(GB)。
max-file最多保留的日志文件数量。轮转后会保留max-file个旧文件,超出部分将被删除。例如:当前日志container.log,轮转后变为container.log.1container.log.2container.log.3,再产生新日志时会删除最早的container.log.3

4. 重启Docker服务

配置修改后,需要重新加载并重启Docker守护进程,使配置生效:

sudo systemctl daemon-reload
sudo systemctl restart docker

或者在某些使用service命令的系统中:

sudo service docker restart

5. 验证配置是否生效

可以通过以下命令查看Docker的当前配置,确认日志参数已加载:

docker info | grep -A 5 "Logging Driver"

期望输出类似:

Logging Driver: json-file
WARNING: No swap limit support

进一步检查某个运行中容器的日志配置:

docker inspect <容器名或ID> | grep -A 3 "LogConfig"

输出中应显示:

"LogConfig": {
    "Type": "json-file",
    "Config": {
        "max-file": "3",
        "max-size": "500m"
    }
}

注意事项

  • 仅对新容器生效:修改daemon.json并重启Docker后,已经存在的容器不会自动应用新的日志限制。你需要删除并重新创建这些容器(例如docker rmdocker run),或者在创建容器时通过--log-opt参数单独指定。
  • 已有日志文件不会被清理:配置只控制未来产生的日志的轮转行为。宿主机上已经积累的旧日志文件需要手动删除,例如:

    sudo rm /var/lib/docker/containers/*/*.log
  • 替代方案:如果不想全局修改,也可以在运行单个容器时直接指定日志选项:

    docker run -d --log-opt max-size=500m --log-opt max-file=3 your-image
  • 日志驱动兼容性json-file是最常用的驱动,但Docker还支持syslogjournaldfluentd等。如果使用其他驱动,需要确认它们是否支持max-sizemax-file(部分驱动不支持)。
最后修改:2026 年 04 月 16 日
如果觉得我的文章对你有用,请随意赞赏