必须通过daemon.json统一配置日志驱动及轮转策略,如{"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"7"}},并重启Docker服务生效,否则日志无节制增长将导致磁盘爆满。

要在生产环境中避免Docker容器日志无节制增长导致磁盘爆满,必须通过daemon.json统一配置日志驱动及轮转策略,而不是依赖单个容器的--log-opt临时参数。
确认当前默认日志驱动
运行docker info | grep "Logging Driver",输出类似Logging Driver: json-file表示当前使用默认驱动。若显示其他驱动(如syslog),说明已有配置,需先备份再修改。
这一步不能跳过——直接改daemon.json却不知当前生效驱动,容易误判配置是否生效。
创建或编辑daemon.json文件
执行sudo mkdir -p /etc/docker确保目录存在;若文件已存在,用sudo nano /etc/docker/daemon.json打开;若不存在,直接新建空文件。
注意:Linux系统下该路径是唯一有效位置,Windows请改用C:\ProgramData\docker\config\daemon.json,路径写错会导致配置完全不加载。
文件权限必须为644,且属主为root:root,否则Docker守护进程启动时会静默忽略该文件。
配置json-file驱动并启用自动轮转
在daemon.json中写入以下JSON内容(仅保留必要字段,避免多余逗号):
{"log-driver":"json-file","log-opts":{"max-size":"50m","max-file":"7"}}
【max-size必须带单位,如"50m",写成50或"50"将导致Docker守护进程启动失败】
其中max-size控制单个日志文件上限,max-file指定最多保留几个旧日志文件。设为7意味着最多保留当前+6个历史压缩日志,超出后最老的会被自动删除。
切换到syslog或journald等外部驱动
方法一:使用syslog
确保主机已运行rsyslog或syslog-ng服务,再在daemon.json中写入:{"log-driver":"syslog"}
方法二:对接systemd journal
适用于使用systemd的发行版(CentOS 7+/Ubuntu 16.04+),配置为:{"log-driver":"journald"}
方法三:禁用日志(仅限调试)
{"log-driver":"none"}——容器将不产生任何日志,docker logs命令返回空,且无法恢复。
重载Docker守护进程使配置生效
第一步:验证JSON语法是否正确
运行sudo jq . /etc/docker/daemon.json &>/dev/null || echo "JSON格式错误",无输出即合法。
第二步:重新加载配置
执行sudo systemctl daemon-reload→sudo systemctl restart docker。
第三步:验证新配置是否加载成功
运行sudo docker info | grep "Logging Driver",输出应与daemon.json中设置一致;再起一个新容器,执行docker inspect | grep Log,确认LogConfig字段已继承全局设置。



















