You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker指定json-file日志驱动仍写入syslog如何禁用?

解决Docker容器同时写入json-file和/var/log/syslog的问题

我碰到过类似旧版本Docker + Ubuntu组合的问题,结合你的情况(Docker 1.10.3、Ubuntu 15.04,已配置容器json-file日志驱动但仍写入syslog),主要是两个核心原因导致的,下面是针对性的解决方案:

原因1:Systemd捕获容器输出并转发到syslog

因为你用systemd unit文件启动容器,默认情况下systemd会收集容器的stdout/stderr到journald,而journald又会将日志转发到syslog。要阻止这个行为,需要修改你的容器unit文件:

  1. 打开你的容器systemd unit文件(比如/etc/systemd/system/your-container.service)
  2. 在[Service]段落中添加以下配置,直接丢弃容器的标准输出/错误:
    StandardOutput=null
    StandardError=null
    
    如果你想保留日志到journal但不转发到syslog,可以替换为:
    LogLevelMax=off
    
  3. 重新加载systemd配置并重启容器服务:
    sudo systemctl daemon-reload
    sudo systemctl restart your-container.service
    

原因2:Docker Daemon默认转发容器日志到syslog

在Docker 1.10.x这个旧版本中,即使你为单个容器指定了json-file日志驱动,Docker daemon可能仍会默认将所有容器日志转发到syslog。要禁用这个全局行为:

  1. 编辑Docker的默认配置文件/etc/default/docker
  2. 在DOCKER_OPTS中添加--log-driver=json-file,确保daemon使用json-file作为默认日志驱动,且不转发到syslog:
    DOCKER_OPTS="--log-driver=json-file"
    
  3. 重启Docker服务使配置生效:
    sudo service docker restart
    
    注意:这个修改会影响所有新启动的容器,已运行的容器需要重启才能应用新的daemon日志策略。

额外排查步骤

如果以上方案无效,可以先确认日志的来源:

  • 执行grep "你的容器名称/ID" /var/log/syslog,查看日志的前缀(比如是docker还是systemd),以此判断是Docker daemon还是systemd在转发日志。

内容的提问来源于stack exchange,提问作者Michael Niemand

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:02:42