字段是干什么的
logging 用来为单个服务指定日志驱动与选项。Compose 默认沿用守护进程的 json-file 驱动:容器 stdout/stderr 被写成宿主上的 JSON 文件,默认不轮转。长跑服务只靠默认值,日志会一直增长直到撑满磁盘,所以生产编排里普遍显式写上 max-size 与 max-file。
基本信息
| 适用平台 | Docker Compose v2 / Docker Engine |
|---|---|
| 字段 | logging.driver 与 logging.options |
| 常用组合 | json-file + max-size + max-file |
| 其他驱动 | local、syslog、journald、fluentd、none |
| 读日志工具 | docker compose logs 依赖当前驱动的支持 |
典型使用场景
- 上线前统一加轮转,避免 /var/lib/docker/containers 下的日志文件累积撑盘
- 日志无长期价值的高频批量任务用 driver: none 丢弃,减少写盘
- 接入集中采集:改用 syslog 或 fluentd 驱动投送到日志平台
- 按服务差异化配置:关键服务保留 3 个文件,噪音服务只留 1 个
- 排障期临时放宽上限,问题定位后恢复常规参数
配置示例
配置示例
services:
api: # 常驻服务:单文件 10MB,最多保留 3 个
image: app/api:1.4.2
logging:
driver: json-file
options:
max-size: '10m'
max-file: '3'
batch: # 批量任务:日志无价值时直接丢弃
image: app/batch:1.4.2
logging:
driver: none
# 查看单个服务日志:docker compose logs --tail=20 api字段取值与含义
| 字段 | 含义 | 取值提示 |
|---|---|---|
| driver | 日志驱动 | 默认 json-file,可选 local/syslog/journald/fluentd/none |
| options.max-size | 单个日志文件上限 | 如 10m、50m,超过后切分新文件 |
| options.max-file | 保留的历史文件个数 | 与 max-size 搭配才算完成的轮转策略 |
| driver: none | 不写任何日志 | 排障期对关键服务开启会失去现场 |
驱动换成非 json-file 之后 docker compose logs 常常读不到内容(日志被送往 journald 或远端平台),排障前先确认当前服务用的是哪个驱动。
轮转参数在容器创建时写入,改完要执行 docker compose up -d 重建容器才生效;daemon.json 里配置的全局默认值同样只对新创建的容器起作用。
参数取值建议
- max-size 从 10m 起步:单文件过大时 docker logs 与采集端读取都会变慢
- max-file 与磁盘换算:10m 乘 3 约 30MB,按服务日志量决定是否加大
- 调试期临时调大 max-file,问题定位完就恢复,避免长期占用磁盘
- 多服务共用一套参数时用 YAML 锚点或 .env 变量,减少逐服务抄写与漏配