可用docker logs导出容器日志到本地文件,适合临时排查;生产环境应配置log-driver实现轮转或对接syslog/journald;应用自写日志需挂载目录;集中管理推荐Fluentd采集-json.log。

可以直接用 docker logs 命令将容器标准输出和标准错误日志导出到本地文件,这是最常用、最轻量的方式。但要注意:它导出的是 Docker 守护进程管理的日志快照,并非实时写入的原始文件;若需长期归档或对接中心系统,则应配合日志驱动或采集器。
用 docker logs 导出到文件(适合临时排查)
该方法适用于快速保存当前日志内容,不依赖额外配置:
- 导出全部日志:
docker logs> app.log - 追加新日志(持续记录):
docker logs -f>> app.log - 带时间戳并限制行数:
docker logs --timestamps --tail=1000> app.log - 按时间段筛选后导出:
docker logs --since="2h" --until="1h"> last_hour.log
用 --log-driver 指定日志落盘位置(适合生产环境)
Docker 默认使用 json-file 驱动,日志存于 /var/lib/docker/containers/。你可通过参数控制其行为:
- 启用轮转(防磁盘占满):
--log-driver=json-file --log-opt max-size=10m --log-opt max-file=5 - 导出到 syslog:
--log-driver=syslog --log-opt syslog-address=tcp://192.168.1.10:514 - 对接 systemd journal:
--log-driver=journald,之后用journalctl -t docker查看
挂载应用自定义日志目录(适合文件型日志)
若你的应用本身写日志到文件(如 Nginx 的 /var/log/nginx/access.log 或 Spring Boot 的 logs/app.log),这才是挂载的正确场景:
- 确保应用日志路径固定(例如
/app/logs) - 启动时挂载宿主机目录:
docker run -d -v $(pwd)/host-logs:/app/logs my-app - 宿主机上即可直接读取:
tail -f ./host-logs/app.log
用 Fluentd/Filebeat 采集原生日志(适合集中化管理)
当需要把日志发往 Elasticsearch、Kafka 或 S3 时,推荐让采集器从 Docker 的 -json.log 文件读取:
- 保持默认
json-file驱动(无需额外设置) - 部署 Fluentd 容器,并挂载日志目录只读:
-v /var/lib/docker/containers:/var/lib/docker/containers:ro - 配置 Fluentd 使用
in_tail插件监听**/*-json.log,自动解析 JSON 字段











