docker容器日志输出通过配置日志驱动(如json-file、syslog、none等)及选项实现,支持限制大小轮转、远程发送或禁用采集,而非传统文件重定向;默认json-file驱动将日志存为json文件,可全局或运行时配置。

Docker 容器日志输出重定向主要通过配置日志驱动(logging driver)和日志选项实现,而不是传统意义上的“重定向到文件”。Docker 默认使用 json-file 驱动,把 stdout/stderr 写成 JSON 格式文件,存于 /var/lib/docker/containers/<id>/</id> 下。若想改变日志行为(比如限制大小、轮转、发到远程系统或禁用),需在启动容器或配置 daemon 时指定。
H3 日志驱动与常用选项
Docker 支持多种日志驱动,最常用的是:
-
json-file:默认,本地 JSON 文件存储 -
syslog:发给本地或远程 syslog 服务 -
journald:集成 systemd journal -
fluentd/splunk/awslogs:对接日志平台 -
none:完全禁用日志采集(stdout/stderr 仍存在,但 Docker 不捕获)
配置方式分两种:
- 启动容器时用
--log-driver和--log-opt - 全局配置在
/etc/docker/daemon.json中,影响所有容器
H3 限制日志大小和自动轮转(json-file)
适合避免磁盘被日志撑爆。例如限制单个日志文件最大 10MB、最多保留 3 个旧文件:
docker run --log-driver=json-file \ --log-opt max-size=10m \ --log-opt max-file=3 \ nginx
对应 daemon.json 写法:
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
重启 Docker 生效:sudo systemctl restart docker
H3 输出到 syslog(本地或远程)
确保 syslog 服务运行(如 rsyslog 或 syslog-ng),然后:
docker run --log-driver=syslog \ --log-opt syslog-address=udp://192.168.1.100:514 \ --log-opt syslog-tag=docker-nginx \ nginx
不加 syslog-address 则默认走本地 /dev/log(Unix socket)。tag 用于区分来源,方便过滤。
H3 完全关闭 Docker 日志采集
仅当应用自行处理日志(如写入文件或发到 ELK),且你不需要 docker logs 命令时使用:
docker run --log-driver=none alpine echo "hello"
⚠️ 注意:docker logs 将返回 Error response from daemon: configured logging driver does not support reading;容器 stdout/stderr 依然能被 shell 捕获(如 docker run ... > out.log 2>&1),但这属于宿主机层面重定向,不经过 Docker 日志系统。
不复杂但容易忽略











